1 条题解

  • 0
    @ 2024-12-24 9:14:33

    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
    上传者