P1026 本地ac,提交wa, 在洛谷ide和在本地运行结果不一样。 我太菜了,有没有大佬帮我看看,谢谢
#include <iostream>
#include <cstdio>
using namespace std;
char s[300], m[20][300];
int f[300][300], q[300][300],ql[300],fs[300][300];
int p,k,n;
int max(int a, int b){return a>b?a:b;}
int isFlag(int l, int r){
int len = r - l + 1;
for(int i=0; i<n; i++){
if(ql[i] != len) continue;
bool flag = 1;
for(int j=0; j<len; j++){
if(m[i][j] != s[l+j]) flag = false;
}
if(flag) return 1;
}
return 0;
}
int dfs(int l, int r){
if(fs[l][r] != -1) return fs[l][r];
if(l == r) return isFlag(l,r);
int ans = dfs(l+1, r);
for(int i=l;i<=r;i++){
if(isFlag(l,i)){
ans++;
break;
}
}
fs[l][r] = ans;
return ans;
}
int main(){
scanf("%d %d", &p, &k);
p *= 20;
for(int i=0;i<p;i++){
s[i] = getchar();
if(s[i] > 'z' || s[i] < 'a') i--;
}
scanf("%d", &n);
getchar();
for(int i=0;i<n;i++){
char li = 'z';
int j = 0;
for(;li>='a'&&li<='z';j++){
li = getchar();
m[i][j] = li;
}
ql[i] = j-1;
}
for(int i=0;i<p;i++){
for(int j=0;j<=k;j++){
f[i][j] = -1000000;
}
}
for(int i=0;i<p;i++) for(int j=0;j<p;j++) fs[i][j] = -1;
f[0][0] = isFlag(0,0);
for(int i=1;i<p;i++){
for(int j=0;j<=k;j++){
if(j > i) continue;
f[i][j] = f[i-1][j];
for(int e=1;e<=i;e++){
f[i][j] = max(f[i][j], f[e-1][j-1] + dfs(e, i));
}
}
}
//cout << isFlag(2,3);
printf("%d", f[p-1][k]);
return 0;
}