没想清楚 可能加到最后会超int所以应该double 想太少
#include<stdio.h>
#include<iostream>
#include<string.h>
using namespace std;
double dp[15][2100];
int main()
{
int T,flag,i,j,n,m,t;
memset(dp,0,sizeof(dp));
for(i=1;i<=2005;i++)
dp[1][i]=1;
for(i=1;i<=10;i++)
{
for(j=1;j<=2000;j++)
{
for(t=0;t<=j/2;t++)
dp[i][j]+=dp[i-1][t];
}
}
scanf("%d",&T);
for(flag=1;flag<=T;flag++)
{
scanf("%d%d",&n,&m);
double ans=0;
for(j=1;j<=m;j++)
ans+=dp[n][j];
printf("Case %d: n = %d, m = %d, # lists = %.0f\n",flag,n,m,ans);
}
return 0;
}