登 录
记忆化搜索!
#include<iostream> #include<cstdio> #include<cstring> using namespace std; int dp[21][21][21]; int w(int a,int b,int c) { if(a<=0||b<=0||c<=0) { dp[a][b][c]=1; return 1; } if(dp[a][b][c]!=0) return dp[a][b][c]; 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 a,b,c,x,y,z; while(cin>>a>>b>>c) { if(a==-1&&c==-1&&b==-1) break; if(a<=0||b<=0||c<=0 ) printf("w(%d, %d, %d) = %d/n",a,b,c,1); else { x=a;y=b;z=c; if(a>20||b>20||c>20) { x=20;y=20;z=20; } memset(dp,0,sizeof(0)); printf("w(%d, %d, %d) = %d/n",a,b,c,w(x,y,z)); } } return 0; }
抱歉!评论已关闭.