现在的位置: 首页 > 综合 > 正文

多重背包——HDOJ 2191

2013年10月13日 ⁄ 综合 ⁄ 共 499字 ⁄ 字号 评论关闭

HDOJ 2191 题目描述

下面用的是最基本的多重背包转01背包方法做的,没有用单调队列优化,因为还没研究。

/*
HDOJ 2191
多重背包问题,下面是用最基本的转化方法
将其转化为01背包问题,未优化的
*/

#include <iostream>
using namespace std;

int main()
{
	int nCase,Limit,nKind,i,j,k,
		price[101],weight[101],bag[101],dp[101];
	
	cin>>nCase;
	while(nCase--)
	{
		cin>>Limit>>nKind;
		for(i=0;i<nKind;i++)
			cin>>price[i]>>weight[i]>>bag[i];

		memset(dp,0,sizeof(dp));

		for(i=0;i<nKind;i++)
			for(j=0;j<bag[i];j++)
				for(k=Limit;k>=price[i];k--)
					if(dp[k] < dp[k-price[i]]+weight[i])
						dp[k]=dp[k-price[i]]+weight[i];

		cout<<dp[Limit]<<endl;
	}
	return 0;
}

抱歉!评论已关闭.