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;
}
View Code

 

posted @ 2018-09-10 17:39  LMissher  阅读(138)  评论(0)    收藏  举报