代码实现出现问题,希望大神能来指正
在洛谷新手村做的题(递归题+记忆化搜索):正常的话输入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); } }