在题解区看到一个思路,做了一些修改,但是一直过不去。
附上代码
#include<stdio.h>
long long int a[10001][3] //这是存输入的数据的数组;
long long int dp[25][25][25] //用于记忆搜索的数组;
long long int w(long long int a,long long int b,long long int c)
{
if(a<=0||b<=0||c<=0)
{
return 1;
}
else if(a>20||b>20||c>20)
{
if(dp[20][20][20]!=0)
{
return dp[20][20][20];
}
else
{
w(20,20,20);
return dp[20][20][20];
}
} //在判断没有出现负数以后,再判断是否有大于20的数据,如果有,再判断dp[20][20][20]是否为零,如果不是零,则直接返回dp[20][20][20]的值,否则对20,20,20进行一次函数调用再返回该值
else if(dp[a][b][c]!=0)
{
return dp[a][b][c];
}
else if(a<b&&b<c)
{
dp[a][b][c]=w(a,b,c-1)+w(a,b-1,c-1)-w(a,b-1,c);
return dp[a][b][c];
}
else
{
dp[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);
return dp[a][b][c];
}
};
int main()
{
int i=0,j,n=1,p,q,r;
for(p=0;p<25;p++)
{
for(q=0;q<25;q++)
{
for(r=0;r<25;r++)
{
dp[p][q][r]=0;
}
}
}
while(n>0)
{
i++;
scanf("%lld%lld%lld",&a[i][0],&a[i][1],&a[i][2]);
if(a[i][0]==-1&&a[i][1]==-1&&a[i][2]==-1)
{
n=-1;
}
}
for(j=1;j<i;j++)
{
printf("w(%lld,%lld,%lld)=%lld\n",a[j][0],a[j][1],a[j][2],w(a[j][0],a[j][1],a[j][2]));
}
}
输入的各项数据在dev里面都是对的,但是oj时会出现两个wa和三个一直judge,求教各位大神。。。。