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;
}

浙公网安备 33010602011771号