poj 1579 Function Run Fun
水题,照着给的式子记忆化搜索即可。
#include <iostream> #include <cstdio> #include <cstring> #include <cmath> using namespace std; typedef long long ll; int i,j,k; ll dp[57][57][57]; ll dfs(int ii,int jj,int kk){ //cout<<ii<<" "<<jj<<" "<<kk<<endl; if(ii<=0||jj<=0||kk<=0) return 1; if(ii>20||jj>20||kk>20) return dfs(20,20,20); if(dp[ii][jj][kk]) return dp[ii][jj][kk]; if(ii<jj&&jj<kk){ dp[ii][jj][kk]=dfs(ii,jj,kk-1)+dfs(ii,jj-1,kk-1)-dfs(ii,jj-1,kk); } else{ dp[ii][jj][kk]=dfs(ii-1,jj,kk)+dfs(ii-1,jj-1,kk)+dfs(ii-1,jj,kk-1)-dfs(ii-1,jj-1,kk-1); } return dp[ii][jj][kk]; } int main(){ memset(dp,0,sizeof(dp)); while(~scanf("%d%d%d",&i,&j,&k)){ if(i==-1&&j==-1&&k==-1) break; printf("w(%d, %d, %d) = %lld\n",i,j,k,dfs(i,j,k)); } return 0; }

浙公网安备 33010602011771号