hdu1331(记忆化搜索)
#include<iostream> #include<stdio.h> #include<string.h> using namespace std; typedef __int64 ss; #define max 55 #define p 10000000 ss n,m; ss dp[max][max][max],dist[max]; int dfs(int a,int b,int c) { int sum=0; if(dp[a][b][c]) return dp[a][b][c]; if(a<=0||b<=0||c<=0) sum=1; else if(a>20||b>20||c>20) sum=dfs(20,20,20); else if(a<b&&b<c) sum=dfs(a,b,c-1)+dfs(a,b-1,c-1)-dfs(a,b-1,c); else sum=dfs(a-1,b,c)+dfs(a-1,b-1,c)+dfs(a-1,b,c-1)-dfs(a-1,b-1,c-1); dp[a][b][c]=sum; return dp[a][b][c]; } int main() { int x,y,z; while(scanf("%d%d%d",&x,&y,&z)>0) { if(x==-1&&y==-1&&z==-1) break; memset(dp,0,sizeof(dp)); printf("w(%d, %d, %d) = ",x,y,z); if(x<=0||y<=0||z<=0) { printf("1\n"); continue; } if(x>20||y>20||z>20) x=y=z=20; printf("%d\n",dfs(x,y,z)); } return 0; }
朋友们,虽然这个世界日益浮躁起来,只要能够为了当时纯粹的梦想和感动坚持努力下去,不管其它人怎么样,我们也能够保持自己的本色走下去。