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;

}

  

你可能感兴趣的:(poj)