Vijos P1198 最佳课题选择

最佳课题选择

这是一道多重背包问题

仍记得当时写出来死命debug的过程

然而最后发现没开long long导致只过两组

只考虑给当前分配多少和给前面所有的东西分配多少就可以


上代码

#include 
#include 
#include 

#define LL long long

using namespace std;

const int Maxn=201;

LL n,m,a[Maxn],b[Maxn],sum[Maxn],f[Maxn][Maxn];

LL pow(LL x,LL n)
{
	LL c=1;
	for(int i=1;i<=n;i++)c*=x;
	return c;
}

int main()
{
	memset(f,1,sizeof(f));
	
	scanf("%lld%lld",&n,&m);
	
	for(int i=1;i<=m;i++)
		scanf("%lld%lld",&a[i],&b[i]);
	
	for(int i=0;i<=n;i++)f[0][i]=0;
	for(int i=0;i<=m;i++)f[i][0]=0;

	for(int i=1;i<=n;i++)f[1][i]=a[1] * ( pow(i,b[1]) );
	
	for(int i=2;i<=m;i++)
		for(int j=1;j<=n;j++)
			for(int k=0;k<=j;k++){
				if(f[i-1][j-k] + a[i] * ( pow(k,b[i]) )
欢迎指出Bug


End。

你可能感兴趣的:(题解,动态规划)