![]() |
#2
八画小子2020-03-10 23:20
|
只有本站会员才能查看附件,请 登录
只有本站会员才能查看附件,请 登录
正常的话输入50,50,50应该输出w(50, 50, 50) = 1048576,但是不知道为什么每次输出的值都不一样且不是答案,所以想请大神帮忙看看为什么为这样

以下是我的代码

#include<iostream>
#include<string.h>
using namespace std;
long long r[25][25][25]={0};
int w(int a,int b,int c){
if(a<=0||b<=0||c<=0) return 1;
else if(r[a][b][c]!=0) return r[a][b][c];
else if(a>20||b>20||c>20){
r[20][20][20]=w(20,20,20);
return r[20][20][20];
}
else if(a<b&&b<c){
r[a][b][c]=w(a,b,c-1)+w(a,b-1,c-1)-w(a,b-1,c);
}
else r[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 r[a][b][c];
}
int main(){
int a,b,c;
while(1){
cin>>a>>b>>c;
memset(r,0,sizeof(r));
if(a==-1&&b==-1&&c==-1) break;
cout<<"w("<<a<<','<<b<<','<<c<<")="<<w(a,b,c);
}
}
#include<string.h>
using namespace std;
long long r[25][25][25]={0};
int w(int a,int b,int c){
if(a<=0||b<=0||c<=0) return 1;
else if(r[a][b][c]!=0) return r[a][b][c];
else if(a>20||b>20||c>20){
r[20][20][20]=w(20,20,20);
return r[20][20][20];
}
else if(a<b&&b<c){
r[a][b][c]=w(a,b,c-1)+w(a,b-1,c-1)-w(a,b-1,c);
}
else r[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 r[a][b][c];
}
int main(){
int a,b,c;
while(1){
cin>>a>>b>>c;
memset(r,0,sizeof(r));
if(a==-1&&b==-1&&c==-1) break;
cout<<"w("<<a<<','<<b<<','<<c<<")="<<w(a,b,c);
}
}