社区讨论
help!!!!90pts
P1026[NOIP 2001 提高组] 统计单词个数参与者 2已保存回复 1
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 1 条
- 当前快照
- 1 份
- 快照标识符
- @mhj1lndv
- 此快照首次捕获于
- 2025/11/03 19:14 4 个月前
- 此快照最后确认于
- 2025/11/03 19:14 4 个月前
CPP
#include <bits/stdc++.h>
#define int long long
using namespace std;
const int N = 205;
int p, k, ans = 0, s, n;
char str[N];
int f[N][N];
char w[10][N];
bool t[N];
int cnt(int idx, int l, int r)
{
int len = r - l - strlen(w[idx] + 1) + 2, res = 0;
for (int i = 0; i <= len - 1; i++)
{
for (int j = 1; j <= strlen(w[idx] + 1); j++)
{
if ((w[idx][j] ^ str[l + i + j - 1]) || (t[l + i]))
break;
else if (j == strlen(w[idx] + 1))
{
res++;
t[l + i] = true;
}
}
}
return res;
}
int q(int l, int r)
{
for (int i = l; i <= r; i++)
t[i] = false;
int res = 0;
for (int i = 1; i <= s; i++)
if (r - l + 1 >= strlen(w[i] + 1))
res += cnt(i, l, r);
return res;
}
void calc()
{
for (int i = 1; i <= n - 1; i++)
f[i][1] = q(1, i);
for (int j = 2; j <= k; j++)
for (int i = j; i <= n - 1; i++)
for (int l = j - 1; l <= i - 1; l++)
f[i][j] = max(f[i][j], f[l][j - 1] + q(l + 1, i));
for (int i = k; i <= n - k; i++)
ans = max(ans, f[i][k] + q(i + 1, n));
}
signed main()
{
ios::sync_with_stdio(0);
cin.tie(0);
cin >> p >> k;
k--;
for (int i = 1; i <= p; i++)
cin >> (str + 20 * (i - 1) + 1);
n = strlen(str + 1);
cin >> s;
for (int i = 1; i <= s; i++)
cin >> (w[i] + 1);
calc();
cout << ans << endl;
return 0;
}
回复
共 1 条回复,欢迎继续交流。
正在加载回复...