poj 2193 dp
蛮简单的dp,只是要注意会超int
dp[i][j]代表i个数以j结尾的数列个数
#include<stdio.h> #include<string.h> __int64 dp[11][2001]; int i,j,k; void init() { memset(dp,0,sizeof(dp)); for(i=1;i<=2000;i++) dp[1][i]=1; for(i=2;i<=10;i++) { for(j=i;j<=2000;j++) { for(k=1;k<=j/2;k++) { dp[i][j]+=dp[i-1][k]; } } } } int main() { int n,m,t,cases=1; scanf("%d",&t); init(); while(t--) { __int64 ans=0; scanf("%d%d",&n,&m); for(i=1;i<=m;i++) ans+=dp[n][i]; printf("Case %d: n = %d, m = %d, # lists = %I64d\n",cases++,n,m,ans); } return 0; }