P1464 Function 蒟蒻全RE求助

P1464 Function

hgjhgjgj @ 2022-10-29 15:30:52

#include<stdio.h>
long long int g[40][40][40]={{0},{0},{0}};
int w(int a,int b,int c)
{
    if(a<0) a=0;if(b<0) b=0;if(c<0) c=0;
    if(g[a][b][c]!=0)return g[a][b][c];
    else{
    if(a<=0||b<=0||c<=0) return 1;
    if(a>20||b>20||c>20) return g[a][b][c]=w(20,20,20);
    if(a<b&&b<c) return g[a][b][c]=w(a,b,c-1)+w(a,b-1,c-1)-w(a,b-1,c);
    return g[a][b][c]=w(a-1,b,c)+w(a-1,b-1,c)+w(a-1,b,c-1)-w(a-1,b-1,c-1);
    }
}
int main()
{
    int i,x,y,z;
    int f[100][6];
    for( i=1;i<=2000;i++)
    {
        scanf("%d%d%d",&f[i][1],&f[i][2],&f[i][3]);
        if(f[i][1]==-1&&f[i][1]==-1&&f[i][1]==-1) break;
    }
    for(int j=1;j<i;j++)
    {
        printf("w(%d,%d,%d) = %d\n",f[j][1],f[j][2],f[j][3],w(f[j][1],f[j][2],f[j][3]));
    }
    return 0;
}

上面是全RE的代码。明明在递归那里已经加了if防止后续使用数组下标有负数了,但不知道为啥还是全都RE了,求大佬帮忙。


by icaijy @ 2022-11-11 12:08:39

@hgjhgjgj

  1. 大于20的情况会爆炸的,你只有40啊(应该判断一下大于20就改成20,这题数据贼大)

  2. 开long long,long long用scanf("%lld")输入。


|