mirror of
https://gitcode.com/Zengtudor/alg2025.git
synced 2025-09-05 17:50:36 +00:00
update
This commit is contained in:
parent
c200843ae3
commit
f8994b5c7c
@ -4,3 +4,7 @@ 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