求助,本地ac提交wa
  • 板块灌水区
  • 楼主ltdj
  • 当前回复13
  • 已保存回复13
  • 发布时间2020/7/28 18:03
  • 上次更新2023/11/6 21:56:53
查看原帖
求助,本地ac提交wa
159375
ltdj楼主2020/7/28 18:03

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;
}
2020/7/28 18:03
加载中...