首页 > 代码库 > poj1579 dp
poj1579 dp
1 //Accepted 176 KB 0 ms 2 //预处理出来0--20的部分 3 //dp 4 //其中用到-1的值 5 //把所有的点左移一下 6 #include <cstdio> 7 #include <cstring> 8 #include <iostream> 9 using namespace std;10 const int imax_n = 22;11 int dp[imax_n][imax_n][imax_n];12 int n;13 void Dp()14 {15 memset(dp,0,sizeof(dp));16 for (int i=0;i<imax_n;i++)17 for (int j=0;j<imax_n;j++)18 for (int k=0;k<=1;k++)19 dp[i][j][k]=1;20 for (int i=0;i<=1;i++)21 for (int j=0;j<imax_n;j++)22 for (int k=0;k<imax_n;k++)23 dp[i][j][k]=1;24 for (int i=0;i<imax_n;i++)25 for (int j=0;j<=1;j++)26 for (int k=0;k<imax_n;k++)27 dp[i][j][k]=1;28 for (int i=2;i<imax_n;i++)29 {30 for (int j=2;j<imax_n;j++)31 {32 for (int k=2;k<imax_n;k++)33 {34 if (i<j && j<k)35 dp[i][j][k]=dp[i][j][k-1]+dp[i][j-1][k-1]-dp[i][j-1][k];36 else37 dp[i][j][k]=dp[i-1][j][k]+dp[i-1][j-1][k]+dp[i-1][j][k-1]-dp[i-1][j-1][k-1];38 }39 }40 }41 }42 int getAns(int a,int b,int c)43 {44 if (a<=0 || b<=0 || c<=0) return 1;45 if (a>20 || b>20 || c>20) return dp[21][21][21];46 return dp[a+1][b+1][c+1];47 }48 int main()49 {50 Dp();51 int a,b,c;52 while (scanf("%d%d%d",&a,&b,&c) && !(a==-1 && b==-1 && c==-1))53 {54 printf("w(%d, %d, %d) = %d\n",a,b,c,getAns(a,b,c));55 }56 return 0;57 }
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。