讨论 / 302-->error106?
phoenix 2009-08-29 05:31:00
点我顶贴 收藏 删除
为什么在我机器上ac在这106?
#1 phoenix@2008-10-01 08:10:00
回复 删除
[color=red]此题描述有误,强烈要求改正!!![/color]
#2 phoenix@2008-10-01 08:10:00
回复 删除
要忽视[color=red]第一行为一个正整数(0<n<=5)表示有n组测试数据[/color]!!!!!!!

#3 phoenix@2008-10-01 08:12:00
回复 删除
[color=blue]管理员!!![/color]
#4 binarie@2008-10-01 17:49:00
回复 删除
已修正,感谢反馈
#5 hws_sheng@2009-08-29 05:31:00
回复 删除
#include<iostream>

using namespace std;

int N,t,K;

string s[7],src;

int F[300][45],ps[300][300],le[7];

int Find(int x,int y)

{

int cr=0;

for (int i=x;i<=y;i++)

for (int j=1;j<=N;j++)

if (le[j]<=y-i+1){

bool bo=false;

for (int k=0;k<le[j];k++)

if (src[i+k]!=s[j][k]){

bo=true;

break;

}

if (!bo){

cr++;

break;

}

}

return cr;

}

int main()

{

// cin>>t;for (int sx=1;sx<=t;sx++){

cin>>N>>K;

src=" ";getchar();

for (int i=1;i<=N;i++){

getline(cin,s[1]);

src+=s[1];

}

cin>>N;

for (int i=1;i<=N;i++){

cin>>s[i];

le[i]=s[i].size();

}

memset(F,0,sizeof(F));

int len=src.size()-1;

for (int i=1;i<=len;i++) //先处理一下数据

for (int j=i;j<=len;j++)

ps[i][j]=Find(i,j);//i~j可以填有多少个单词

for (int i=1;i<=len;i++)

F[i][1]=ps[1][i];//把1~i为第一段时..

for (int k=2;k<=K;k++)//枚举把单词分成k份

for (int i=k;i<=len;i++)//枚举1~i分为k份时

for (int j=i;j>=k;j--)

if (F[i][k]<F[j-1][k-1]+ps[j][i])

F[i][k]=F[j-1][k-1]+ps[j][i];

cout<<F[len][K]<<endl;

// }

return 0;

}

查看更多回复
提交回复