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

浙公网安备 33010602011771号