首页 > 代码库 > poj2193
poj2193
1 //Accepted 368K 532MS 2 //线性dp 3 //dp[i][j]表示前i位最后一个是j的排列数 4 //dp[i][j]=sum(dp[i-1][h]) h*2<=j 5 #include <cstdio> 6 #include <cstring> 7 #include <iostream> 8 using namespace std; 9 const int imax_n = 15;10 const int imax_m = 2005;11 __int64 dp[imax_n][imax_m];12 int n,m;13 void Dp()14 {15 memset(dp,0,sizeof(dp));16 for (int i=1;i<=m;i++)17 dp[1][i]=1;18 for (int i=2;i<=n;i++)19 {20 for (int j=1<<(i-1);j<=m;j++)21 {22 dp[i][j]=0;23 for (int k=1<<(i-2);2*k<=j;k++)24 {25 dp[i][j]+=dp[i-1][k];26 }27 }28 }29 }30 int main()31 {32 int T;33 scanf("%d",&T);34 for (int t=1;t<=T;t++)35 {36 scanf("%d%d",&n,&m);37 Dp();38 __int64 ans=0;39 for (int i=1<<(n-1);i<=m;i++)40 ans+=dp[n][i];41 printf("Case %d: n = %d, m = %d, # lists = %I64d\n",t,n,m,ans);42 }43 return 0;44 }
poj2193
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。