mirror of
https://gitcode.com/Zengtudor/alg2025.git
synced 2025-09-04 01:01:43 +00:00
update
This commit is contained in:
parent
c200843ae3
commit
f8994b5c7c
@ -3,4 +3,8 @@
|
||||
dp[i][j]=从第i个到第j个涂成指定颜色需要的次数
|
||||
|
||||
|
||||
*/
|
||||
*/
|
||||
|
||||
int main(){
|
||||
|
||||
}
|
32
src/8/27/P1880.cpp
Normal file
32
src/8/27/P1880.cpp
Normal file
@ -0,0 +1,32 @@
|
||||
/*
|
||||
|
||||
|
||||
|
||||
*/
|
||||
#include <cstdint>
|
||||
#include <iostream>
|
||||
#include <stdexcept>
|
||||
#include <vector>
|
||||
using ll = int64_t;
|
||||
|
||||
int main(){
|
||||
ll n;
|
||||
std::cin>>n;
|
||||
std::vector<ll> arr(n*2+1);
|
||||
std::vector<ll> pre(n*2+1);
|
||||
for(ll i=1;i<=n;i++){
|
||||
std::cin>>arr[i];
|
||||
arr[n+i]=arr[i];
|
||||
}
|
||||
for(ll i=1;i<=2*n;i++){
|
||||
pre[i]=pre[i-1]+arr[i];
|
||||
}
|
||||
std::vector<std::vector<ll>> dp;
|
||||
for(ll i=1;i<n;i++){
|
||||
ll j=i+n-1;
|
||||
dp.clear();
|
||||
dp.resize(2*n+1,std::vector<ll>(2*n+1,1e9));
|
||||
// for(ll x=1;)
|
||||
throw std::runtime_error("NotImpletmented");
|
||||
}
|
||||
}
|
48
src/8/27/opj1808.cpp
Normal file
48
src/8/27/opj1808.cpp
Normal file
@ -0,0 +1,48 @@
|
||||
/*
|
||||
|
||||
dp[i][j]=字符串A到第i位与字符串B到第j位的最长公共子序列长度
|
||||
if a[i]==b[j]:
|
||||
dp[i][j]=dp[i-1][j-1]+1
|
||||
else:
|
||||
dp[i][j]=max(
|
||||
dp[i-1][j],
|
||||
dp[i][j-1]
|
||||
)
|
||||
|
||||
*/
|
||||
|
||||
|
||||
#include <algorithm>
|
||||
#include <iostream>
|
||||
#include <istream>
|
||||
#include <string>
|
||||
#include <vector>
|
||||
|
||||
using ll = int64_t;
|
||||
|
||||
int main(){
|
||||
std::iostream::sync_with_stdio(false);
|
||||
std::cin.tie(nullptr);
|
||||
std::string a,b;
|
||||
std::vector<std::vector<ll>> dp;
|
||||
while (std::cin>>a>>b) {
|
||||
ll n=a.size(),m=b.size();
|
||||
a=' '+a;
|
||||
b=' '+b;
|
||||
dp.clear();
|
||||
dp.resize(n+1,std::vector<ll>(m+1));
|
||||
for(ll i=1;i<=n;i++){
|
||||
for(ll j=1;j<=m;j++){
|
||||
if(a[i]==b[j]){
|
||||
dp[i][j]=dp[i-1][j-1]+1;
|
||||
}else{
|
||||
dp[i][j]=std::max(
|
||||
dp[i-1][j],
|
||||
dp[i][j-1]
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
std::cout<<dp[n][m]<<"\n";
|
||||
}
|
||||
}
|
81
src/8/27/opj2000.cpp
Normal file
81
src/8/27/opj2000.cpp
Normal file
@ -0,0 +1,81 @@
|
||||
#include <algorithm>
|
||||
#include <cstdint>
|
||||
#include <iostream>
|
||||
#include <istream>
|
||||
#include <ostream>
|
||||
#include <tuple>
|
||||
#include <vector>
|
||||
|
||||
/*
|
||||
|
||||
dp[i][j]=字符串A前i个与字符串B前j个
|
||||
5
|
||||
1 4 2 5 -12
|
||||
4
|
||||
-12 1 2 4
|
||||
|
||||
*/
|
||||
|
||||
|
||||
using ll = int64_t;
|
||||
|
||||
#define gdp(i,j,k)(std::get<k>(dp[i][j]))
|
||||
|
||||
int main(){
|
||||
std::iostream::sync_with_stdio(false);
|
||||
std::cin.tie(nullptr);
|
||||
ll n,m;
|
||||
std::cin>>n;
|
||||
std::vector<ll> a(n+1);
|
||||
for(ll i=1;i<=n;i++)std::cin>>a[i];
|
||||
std::cin>>m;
|
||||
std::vector<ll> b(m+1);
|
||||
for(ll j=1;j<=m;j++)std::cin>>b[j];
|
||||
std::vector<std::vector<std::tuple<ll,ll,ll>>>dp(n+1,std::vector<std::tuple<ll,ll,ll>>(m+1));
|
||||
for(ll i=1;i<=n;i++){
|
||||
for(ll j=1;j<=m;j++){
|
||||
if(a[i]!=b[j]){
|
||||
gdp(i, j, 0) = gdp(i-1,j,0);
|
||||
gdp(i, j, 1)=i-1;
|
||||
gdp(i, j, 2)=j;
|
||||
}else{
|
||||
ll maxprev=0;
|
||||
for(ll k=1;k<j;k++){
|
||||
if(b[k]<a[i]){
|
||||
maxprev=std::max(maxprev,gdp(i-1,k,0));
|
||||
gdp(i,j,1)=i-1;
|
||||
gdp(i,j,2)=k;
|
||||
}
|
||||
}
|
||||
gdp(i,j,0)=maxprev+1;
|
||||
}
|
||||
}
|
||||
}
|
||||
ll ans=0,maxi=0,maxj=0;
|
||||
for(ll i=1;i<=n;i++){
|
||||
for(ll j=1;j<=m;j++){
|
||||
// printf("dp[%lld][%lld]=%lld\n",i,j,dp[i][j]);
|
||||
if(ans<gdp(i,j,0)){
|
||||
ans=gdp(i,j,0);
|
||||
maxi=i;
|
||||
maxj=j;
|
||||
}
|
||||
}
|
||||
}
|
||||
std::vector<ll> ans2;
|
||||
ans2.reserve(n);
|
||||
// printf("maxi=%lld,maxj=%lld\n",maxi,maxj);
|
||||
while(maxi>0){
|
||||
ans2.push_back(a[maxi]);
|
||||
ll tmpi=maxi;
|
||||
maxi=gdp(maxi,maxj,1);
|
||||
maxj=gdp(tmpi,maxj,2);
|
||||
}
|
||||
std::cout<<ans<<"\n";
|
||||
std::reverse(ans2.begin(),ans2.end());
|
||||
for(auto i:ans2){
|
||||
std::cout<<i<<" ";
|
||||
}
|
||||
std::cout<<std::endl;
|
||||
_Exit(0);
|
||||
}
|
Loading…
Reference in New Issue
Block a user