动态规划入门——Function Run Fun

来源:互联网 发布:主图BS点指标公式源码 编辑:程序博客网 时间:2024/05/29 15:36

转载请注明出处:http://blog.csdn.net/a1dark

分析:递推公式已经给出了、但是如果直接递归实现的话、必然会超时、所以我们预处理一下、根据公式、DP出所有答案、

#include<stdio.h>#include<string.h>int dp[25][25][25];int fun(int a,int b,int c){    if(a<=0||b<=0||c<=0)return 1;    else return dp[a][b][c];}void init(){    for(int i=1;i<=20;i++){        for(int j=1;j<=20;j++){            for(int k=1;k<=20;k++){                if(i<j&&j<k)                    dp[i][j][k]=fun(i,j,k-1)+fun(i,j-1,k-1)-fun(i,j-1,k);                else                    dp[i][j][k]=fun(i-1,j,k)+fun(i-1,j-1,k)+fun(i-1,j,k-1)-fun(i-1,j-1,k-1);            }        }    }}int solve(int a,int b,int c){    if(a<=0||b<=0||c<=0)return 1;    else if(a>20||b>20||c>20)return dp[20][20][20];    else return dp[a][b][c];}int main(){    int x,y,z;    init();    while(scanf("%d%d%d",&x,&y,&z)!=EOF){        if(x==-1&&y==-1&&z==-1)break;        dp[20][20][20]=1048576;        printf("w(%d, %d, %d) = %d\n",x,y,z,solve(x,y,z));    }    return 0;}



原创粉丝点击