社区讨论
蒟蒻求助,0分
P1308[NOIP 2011 普及组] 统计单词数参与者 1已保存回复 0
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 0 条
- 当前快照
- 1 份
- 快照标识符
- @lrvvbqpk
- 此快照首次捕获于
- 2024/01/27 17:27 2 年前
- 此快照最后确认于
- 2024/01/27 19:33 2 年前
CPP
#include<cstdio>
#include<iostream>
using namespace std;
int p,k,n,m,sum[210][210],f[210][50];
string s,a[10];
bool check(int l,int r) {
string x = s.substr(l,r - l + 1);
for(int i = 1;i <= n; i++) if(!x.find(a[i])) return true;
return false;
}
void inin() {
string ch;
s += '0';
scanf("%d%d",&p,&k);
for(int i = 1;i <= p; i++) {
cin >> ch;
s += ch;
}
scanf("%d",&n); m = s.length() - 1;
for(int i = 1;i <= n; i++) cin >> a[i];
for(int i = m;i >= 1; i--)
for(int j = i;j >= 1; j--) {
sum[j][i] = sum[j+1][i];
if(check(j,i)) sum[j][i]++;
}
}
void dp() {
f[0][0] = 0;
for(int i = 1;i <= k; i++) f[i][i] = f[i-1][i-1] + sum[i][i];
for(int i = 1;i <= m; i++) f[i][1] = sum[1][i];
for(int i = 1;i <= m; i++)
for(int j = 1;j <= k && j < i; j++)
for(int l = j;l < i; l++)
f[i][j] = max(f[i][j],f[l][j-1] + sum[l+1][i]);
printf("%d\n",f[m][k]);
}
int main()
{
inin();
dp();
return 0;
}
回复
共 0 条回复,欢迎继续交流。
正在加载回复...