POJ 1579(递推&递归_F题)解题报告

题目链接:http://poj.org/problem?id=1579

--------------------------------------------------------

题意:题目中很明确的给出了相关的递推关系。

思路:按照题目所述,给出递归函数,题目很友好的提示直接递归会TLE,所以要打表。

代码:

#include<cstdio>
#include<cstring>
#include<algorithm>
#include<iostream>
#include<string>
#include<vector>
#include<stack>
#include<bitset>
#include<cstdlib>
#include<cmath>
#include<set>
#include<list>
#include<deque>
#include<map>
#include<queue>
using namespace std;
typedef long long ll;
const double PI = acos(-1.0);
const double eps = 1e-6;

int ans[20][20][20]={0};

int w(int i,int j,int k)  
{  
    if(i <= 0 || j <= 0 || k <= 0)  
        return 1;  
    return ans[i][j][k];  
}  


int main(void){
    int m,n,p;
    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)    ans[i][j][k]=w(i,j,k-1) + w(i,j-1,k-1) - w(i,j-1,k);
                else ans[i][j][k]= w(i-1,j,k) + w(i-1,j-1,k) + w(i-1,j,k-1) - w(i-1,j-1,k-1);
            }    
        }
    }    
    ans [0][0][0]=1;
    while(scanf("%d %d %d",&m,&n,&p)){
        int m1,m2,m3;
        if(m==-1&&n==-1&&p==-1)    break;
        else{
            if(m<0||n<0||p<0){
                m1=0;
                m2=0;
                m3=0;
            }else if(m>20||n>20||p>20){
                m1=20;
                m2=20;
                m3=20;
            }else{
                m1 =m;
                m2 =n;
                m3 =p;
            }
            printf("w(%d, %d, %d) = %d\n",m,n,p,ans[m1][m2][m3]);
        }
    }

    return 0;

}
View Code

 

posted @ 2018-01-25 17:09  caomp  阅读(118)  评论(0)    收藏  举报