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

POJ 3624 /背包问题

2013年04月08日 ⁄ 综合 ⁄ 共 422字 ⁄ 字号 评论关闭
背包大小为m,对于每一个物品,枚举背包大小j(m到w),对于此物品(重量w、价值v),如果dp[j-w]+v大于dp[j],则采用该方案(dp[j]=dp[j-w]+v)
最后dp[实际背包大小m]就是最大价值
#include <iostream>
using namespace std;
#define SIZE 12881
int dp[SIZE];
int main(int argc, char* argv[])
{
	//freopen("i://input.txt","r",stdin);
	int n,m;
	memset(dp,0,SIZE);
	scanf("%d%d",&n,&m);
	for(int i=0;i<n;i++){
		int w,v;

		scanf("%d%d",&w,&v);
		for(int j=m;j>=w;j--){
			int temp = dp[j-w]+v;
			if(temp>dp[j])
				dp[j] = temp;
		}
		
	}
	printf("%d\n",dp[m]);
	return 0;
}

抱歉!评论已关闭.