4633533_ac_0ms_488k.cpp

来自「部分PKU上的源码」· C++ 代码 · 共 45 行

CPP
45
字号
#include<iostream>
using namespace std;
__int64 test[2005][15];
int g[2005];
int n,m;
void getg(int n,int m)
{
	for(int count=m;count>=1;count--)
	{
		if(count*2<2005) g[count]=g[count*2]+1;
		else g[count]=1;
	}
}
void slove(int n,int m)
{
	for(int i=m;i>=1;i--)
	{
		for(int j=1;j<=g[i]&&j<=n;j++)
		{
			if(j==1) test[i][j]=test[i+1][j]+(__int64)1;
			else
			{
				test[i][j]=test[i+1][j];
				test[i][j]+=test[i*2][j-1];
			}
			//printf("%I64d  ",test[i][j]);
		}
		//printf("\n");
	}
}
int main()
{
	int testnumber;
	cin>>testnumber;
	for(int count=1;count<=testnumber;count++)
	{
		memset(g,0,sizeof(g));
		memset(test,(__int64)0,sizeof(test));
		cin>>n>>m;
		getg(n,m);
		slove(n,m);
		printf("Case %d: n = %d, m = %d, # lists = %I64d\n",count,n,m,test[1][n]);
	}
	return 0;
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?