https://www.luogu.org/record/show?rid=4064919
by SGOI_Aromyase @ 2017-10-29 08:36:38
https://www.luogu.org/record/show?rid=4064757
by SGOI_Aromyase @ 2017-10-29 08:37:07
表示 unsinged long long 美滋滋
```cpp
#include <iostream>
#include <algorithm>
#define N 220
#define M 10
#define K 60
#define P 193
using namespace std;
int f[N][K], g[N][N], h[N];
unsigned long long a[M];
unsigned long long Hash(string s)
{
int i;
unsigned long long r;
for(i = r = 0;i < (signed)s.size();i ++)
r = r * P + s[i];
return r;
}
int main()
{
int n, m, k;
string s, p;
int i, j, t;
unsigned long long v;
cin >> n >> k;
for(s = " ";n --;)
{
cin >> p;
s += p;
}
n = s.size() - 1;
cin >> m;
for(i = 1;i <= m;i ++)
{
cin >> p;
a[i] = Hash(p);
}
for(i = 1;i <= n;i ++)
for(j = i, h[i] = n + 1;j <= n;j ++)
{
v = Hash(s.substr(i, j - i + 1));
for(t = 1;t <= m;t ++)
if(v == a[t])
{
h[i] = j;
break;
}
if(h[i] <= n)
break;
}
for(i = 1;i <= n;i ++)
for(j = i;j <= n;j ++)
for(t = i, g[i][j] = g[i][j - 1];t <= j;t ++)
if(h[t] == j)
g[i][j] ++;
for(i = 1;i <= k;i ++)
f[0][i] = -(n + 1);
for(i = 1;i <= n;i ++)
for(j = 1;j <= k;j ++)
for(t = 1, f[i][j] = -(n + 1);t <= i;t ++)
f[i][j] = max(f[i][j], f[t - 1][j - 1] + g[t][i]);
cout << f[n][k] << endl;
return 0;
}
```
by gorokokoro @ 2017-10-29 08:37:48
对对对确实是这样……
by 颜伟业_C_Asm @ 2018-02-20 14:48:29