poj2193

时间:2023-03-08 20:03:40
poj2193
 //Accepted    368K    532MS
 //线性dp
 //dp[i][j]表示前i位最后一个是j的排列数
 //dp[i][j]=sum(dp[i-1][h])  h*2<=j
 #include <cstdio>
 #include <cstring>
 #include <iostream>
 using namespace std;
 ;
 ;
 __int64 dp[imax_n][imax_m];
 int n,m;
 void Dp()
 {
     memset(dp,,sizeof(dp));
     ;i<=m;i++)
     dp[][i]=;
     ;i<=n;i++)
     {
         <<(i-);j<=m;j++)
         {
             dp[i][j]=;
             <<(i-);*k<=j;k++)
             {
                 dp[i][j]+=dp[i-][k];
             }
         }
     }
 }
 int main()
 {
     int T;
     scanf("%d",&T);
     ;t<=T;t++)
     {
         scanf("%d%d",&n,&m);
         Dp();
         __int64 ans=;
         <<(n-);i<=m;i++)
         ans+=dp[n][i];
         printf("Case %d: n = %d, m = %d, # lists = %I64d\n",t,n,m,ans);
     }
     ;
 }