Run ID 作者 问题 语言 测评结果 分数 时间 内存 代码长度 提交时间
51534 AK2022071346 最优子序列 C++ 解答错误 40 297 MS 784 KB 943 2022-07-13 11:51:11

Tests(8/20):


#include<string> #include<cstdio> #include<cstring> #include<iostream> using namespace std; int n,k,tp,f[3501],cnt,dp[4501][31],ln[3501],len,ans; string s; bool l[3501]; inline int mx(int a,int b){return a<b?b:a;} int main() { scanf("%d%d%d",&n,&k,&tp); cin>>s; for(int i=0;i<n;i++) { len++; if(i<n-1) { if(s[i]==s[i+1]) continue; } l[i]=1; if(!f[s[i]-'a'])f[s[i]-'a']=++cnt; ln[i]=len; len=0; } for(int i=0;i<n;i++) { if(!l[i])continue; int ff=f[s[i]-'a']; for(int j=0;j<(1<<cnt);j++) { if(j&(1<<(ff-1)))dp[j][ff]+=ln[i]; } for(int j=0;j<(1<<cnt);j++) { if(!(j&(1<<(ff-1)))) { for(int k=1;k<=cnt;k++) { if(!(j&(1<<(k-1))))continue; dp[j+(1<<(ff-1))][ff]=mx(dp[j][k]+ln[i],dp[j+(1<<(ff-1))][ff]); } } } } for(int i=0;i<(1<<cnt);i++) for(int j=1;j<=cnt;j++)ans=mx(ans,dp[i][j]); printf("%d",ans); return 0; }


测评信息: