代码:
#include <iostream>
#include <algorithm>
#include <cstring>
#define int long long
using namespace std;
int p, n, m, k, dp[205][50], sum[205][205];
string s = " ", str, a[10];
bool chk(int l, int r)
{
string sub = s.substr(l, r - l + 1);
for(int i = 1; i <= n; i++)
if(sub.find(a[i]) == 0)
return true;
return false;
}
signed main()
{
cin >> p >> k;
for(int i = 1; i <= p; i++) cin >> str, s += str;
cin >> 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(chk(j, i)) sum[j][i]++;
}
for(int i = 1; i <= k; i++)
dp[i][i] = dp[i - 1][i - 1] + sum[i][i];
for(int i = 1; i <= m; i++)
dp[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++)
dp[i][j] = max(dp[i][j], dp[l][j - 1] + sum[l + 1][i]);
cout << dp[m][k] << endl;
return 0;
}
求助~~~