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

  

posted @ 2011-11-24 10:36  Because Of You  Views(333)  Comments(0Edit  收藏  举报