1 条题解
-
0
C++ :
#include<cstdio> #include<cstring> int word[201][201],dp[201][201][41]; char c[21],w[6][10],c0[201],c1[201]; int d,p,k,s,Max,le[6],len; int main(){ int i,j,l,m,yes,x,st; scanf("%d%d",&p,&k); for(j=0;j<p;j++){ scanf("%s",c); if(!j)strcpy(c0, c); else strcat(c0, c); } len=strlen(c0); scanf("%d",&s); for(j=0;j<s;j++){ scanf("%s",w[j]); le[j]=strlen(w[j]); } for(i=0;i<len;i++)for(j=0;j<len;j++)word[i][j]=0; for(i=len-1;i>=0;i--)for(j=len-1;j>=0;j--){ for(l=0;l<s;l++){ yes=0; if(c0[j]==w[l][0]&&le[l]<=i-j+1){ yes=1; for(m=0;m<le[l];m++) if(c0[j+m]!= w[l][m]){yes=0;break;} } if(yes==1)break; } if(yes==1)word[j][i]=word[j+1][i]+1; else word[j][i]=word[j+1][i]; } for(st=1;st<=k;st++)for(i=0;i<len-st+1;i++)for(j = i+st-1; j < len; j++){ if(st==1){ dp[i][j][st]=word[i][j]; continue; } for(Max=0,l=i+st-2;l<j;l++){ x=dp[i][l][st-1]+word[l+1][j]; if(x>Max)Max=x; } dp[i][j][st]=Max; } printf("%d\n",dp[0][len-1][k]); return 0; }
- 1
信息
- ID
- 609
- 时间
- 1000ms
- 内存
- 125MiB
- 难度
- (无)
- 标签
- 递交数
- 0
- 已通过
- 0
- 上传者