fyvdnz @ 2023-04-06 17:31:40
#include<iostream>
#include<cstring>
#include<cstdio>
using namespace std;
long long n,m;
long long p[25][25][25]={0};
long long t(long long a,long long b,long long c){
cout << "w(" << a << ", " << b << ", " << c << ") = ";
}
long long prin(){
cout << n << endl;
}
long long w(long long a,long long b,long long c){
if(a<=0||b<=0||c<=0)
p[a][b][c]=1;
else if(p[a][b][c]!=0)
return p[a][b][c];
else if(a>20||b>20||c>20)
p[a][b][c]=w(20,20,20);
else if(a<b&&b<c)
p[a][b][c]=w(a,b,c-1)+w(a,b-1,c-1)-w(a,b-1,c);
else
p[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 p[a][b][c];
}
int main(){
long long x,y,z;
while(scanf("%lld%lld%lld",&x,&y,&z)==3){
if(x==(-1)&&y==(-1)&&z==(-1))
break;
t(x,y,z);
if(x>20)x=21;
if(y>20)y=21;
if(z>20)z=21;
if(x<-1) x=-1;
if(y<-1) y=-1;
if(z<-1) z=-1;
n=w(x,y,z);
prin();
}
return 0;
}
在遇到(-1 x x) 这种以-1开头的会运行错误,将if(a<=0||b<=0||c<=0) p[a][b][c]=1; 改为 将if(a<=0||b<=0||c<=0) return 1; 就可以正常执行,但是我不理解是为什么。
by ud2_ @ 2023-04-06 17:57:37
负数不是合法下标。
by fyvdnz @ 2023-04-07 08:26:51
@ud2_ 哦哦,实属做题做懵了,谢谢。