hdu 1059 练习练习dp(多重背包)

2014-11-23 23:55:30 · 作者: · 浏览: 4
#include
#include
#include
#include
using namespace std;
const int size = 600000;
int sum;
int dp[size];
void zeroOnePack(int cost,int weight)
{
	int i;
	for(i=sum;i>=cost;i--)
		dp[i] = max(dp[i],dp[i-cost]+weight);
}
void completePack(int cost,int weight)
{
	int i;
	for(i=cost;i<=sum;i++)
		dp[i]=max(dp[i],dp[i-cost]+weight);
}
void MultiPack(int cost,int weight,int count)
{
	int i=1;
	if(cost*count>=sum)
	{
		completePack(cost,weight);
		return ;
	}
	while(i
>num[i]; sum+=num[i]*i; } if(!sum) break; if(sum&1) cout<<"Collection #"<>=1; for(i=0;i<=sum;i++) dp[i] = 0; for(i=1;i<7;i++) if(num[i]) MultiPack(i,i,num[i]); if(dp[sum]==sum) cout<<"Collection #"<