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
大于
开long long,long long用scanf("%lld")
输入。