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号
浙公网安备 33010602011771号