关闭

多重背包问题

标签: acm
152人阅读 评论(0) 收藏 举报
分类:

悼念512汶川大地震遇难同胞——珍惜现在,感恩生活



Problem Description
急!灾区的食物依然短缺!
为了挽救灾区同胞的生命,心系灾区同胞的你准备自己采购一些粮食支援灾区,现在假设你一共有资金n元,而市场有m种大米,每种大米都是袋装产品,其价格不等,并且只能整袋购买。
请问:你用有限的资金最多能采购多少公斤粮食呢?

后记:
人生是一个充满了变数的生命过程,天灾、人祸、病痛是我们生命历程中不可预知的威胁。
月有阴晴圆缺,人有旦夕祸福,未来对于我们而言是一个未知数。那么,我们要做的就应该是珍惜现在,感恩生活——
感谢父母,他们给予我们生命,抚养我们成人;
感谢老师,他们授给我们知识,教我们做人
感谢朋友,他们让我们感受到世界的温暖;
感谢对手,他们令我们不断进取、努力。 
同样,我们也要感谢痛苦与艰辛带给我们的财富~


 

Input
输入数据首先包含一个正整数C,表示有C组测试用例,每组测试用例的第一行是两个整数n和m(1<=n<=100, 1<=m<=100),分别表示经费的金额和大米的种类,然后是m行数据,每行包含3个数p,h和c(1<=p<=20,1<=h<=200,1<=c<=20),分别表示每袋的价格、每袋的重量以及对应种类大米的袋数。
 

Output
对于每组测试数据,请输出能够购买大米的最多重量,你可以假设经费买不光所有的大米,并且经费你可以不用完。每个实例的输出占一行。
 

Sample Input
1 8 2 2 100 4 4 100 2
 

Sample Output
400
#include<iostream>
#include<string>
using namespace std;

int max(int a,int b){
	return a>b?a:b;
}
int main(){
	int t,i,j,v;
	int a[110],b[110],c[110],dp[110];
	cin>>t;
	while(t--){
		int n;
		int m;
		cin>>n>>m;
		for(i=0;i<m;i++){
			cin>>a[i]>>b[i]>>c[i];
		}
		memset(dp,0,sizeof(dp));
		for(i=0;i<m;i++){
			for(j=0;j<c[i];j++){
				for(v=n;v>=a[i];v--){
					dp[v]=max(dp[v],dp[v-a[i]]+b[i]);
				}
			}
		}
		cout<<dp[n]<<endl;
	}
	return 0;
}
===========================================================================================================
改进后:
#include<iostream>
#include<string>
using namespace std;

int max(int a,int b){
	return a>b?a:b;
}
int main(){
	int t,i,j,k;
	int a[110],b[110],c[110],dp[110];
	cin>>t;
	while(t--){
		int n;
		int m;
		cin>>n>>m;
		for(i=0;i<m;i++){
			cin>>a[i]>>b[i]>>c[i];
		}
		memset(dp,0,sizeof(dp));
		for(i=0;i<m;i++){
			if(a[i]*c[i]>=n){
				for(j=a[i];j<=n;j++){
					dp[j]=max(dp[j],dp[j-a[i]]+b[i]);
				}
				continue;
			}
			j=1;
			while(j<c[i]){
				for(k=n;k>=j*a[i];k--){
					dp[k]=max(dp[k],dp[k-j*a[i]]+j*b[i]);
				}
				c[i]=c[i]-j;
				j=j*2;
			}
			for(k=n;k>=c[i]*a[i];k--){
				dp[k]=max(dp[k],dp[k-c[i]*a[i]]+c[i]*b[i]);
			}
		}
		cout<<dp[n]<<endl;
	}
	return 0;
}



0
0
查看评论

[Sicily Coins] 动态规划 多重背包问题

Coins多重背包问题的解题思路
  • Xiao13Yu14
  • Xiao13Yu14
  • 2017-04-01 09:57
  • 763

中级篇——背包问题3(多重背包)

上一篇讲的完全背包是指在所有物品件数无限多的情况下选择最值,现在引申出多重背包问题,即各物品个数均有限且不一定相同,求轙类情况下的最值。
  • chuck001002004
  • chuck001002004
  • 2015-12-17 14:01
  • 4524

多重背包问题 详细推导

多重背包问题(每种物品数量有限)   问题重现: 有n种物品和一个容量为m的背包。每件物品的体积为w1,w2……wn,与之相对应的价值为p1,p2...pn,但是每件物品的数量对应为num1,num2...numn 从其中选出若干物品装入背包可使这些体积总和不超过背包容量,求出获得...
  • WAPWO
  • WAPWO
  • 2013-04-23 16:19
  • 680

poj2392 多重背包问题

http://poj.org/problem?id=2392 Description The cows are going to space! They plan to achieve orbit by building a sort of space elevator: a giant...
  • u013573047
  • u013573047
  • 2014-11-16 20:19
  • 1053

51Nod 1086 背包问题 V2(二进制多重背包)

题目链接:51Nod 1086 背包问题 V2问题描述: 有N种物品,每种物品的数量为C1,C2……Cn。从中任选若干件放在容量为W的背包里,每种物品的体积为W1,W2……Wn(Wi为整数),与之相对应的价值为P1,P2……Pn(Pi为整数)。求背包能够容纳的最大价值。 Input 第1行,...
  • Dextrad_ihacker
  • Dextrad_ihacker
  • 2016-03-18 14:27
  • 538

多重背包问题的二进制分解思想

/** 在这之前,我空间好像转过一个背包九讲,现在我就只对 01背包和多重背包有点印象了 先说下 01 背包,有n 种不同的物品,每个物品有两个属性 size 体积,value 价值,现在给一个容量为 w 的背包,问 最多可带走多少价值的物品。 i...
  • zcube
  • zcube
  • 2015-09-07 19:53
  • 2720

动态规划第二讲——完全背包与多重背包问题

上一节,我们讨论了01背包问题,说明了*递归与分治法 与 动态规划DP的区别和联系,介绍了缓存的概念*。以下,我们用DC、DP、cache分别表示分治法、动态规划和缓存。本节,我们讨论01背包的另外两种形似—— 完全背包和多重背包问题,分析DP问题的另外一些情况。 例一:完全背包问题 ...
  • trochiluses
  • trochiluses
  • 2014-07-21 14:53
  • 5061

用回溯法解决背包问题

/*编译环境:gcc (GCC) 3.2 20020903 (Red Hat Linux 8.0 3.2-7)Copyright (C) 2002 Free Software Foundation, Inc.Author:NinGoo*/#include #define N 6int main(){...
  • NinGoo
  • NinGoo
  • 2005-04-20 13:37
  • 2338

01背包、完全背包、多重背包问题的C++实现及路径记录

这里主要实现路径记录,只求最值问题移步 01背包、完全背包、多重背包问题的C++实现 以下均打印输出路径,即装入背包的物品序号,和最大值。01背包问题#include <iostream> #include<algorithm>using namespace std;in...
  • m0_37830950
  • m0_37830950
  • 2017-04-19 17:35
  • 903

回溯算法--背包问题

1、0-1背包问题: 给定n种物品,价值分别为v[1],v[2],...,v[n],重量分别为w[1],w[2],...,w[n]。有一个背包其载重容量为c,问应如何选择装入背包中的物品,使得装入背包中的物品的总价值最大。这里每种物品只能装入一次或者不装入背包。这是一个特殊的整数线性规划问...
  • sinat_24436879
  • sinat_24436879
  • 2015-04-10 22:01
  • 933
    个人资料
    • 访问:12806次
    • 积分:648
    • 等级:
    • 排名:千里之外
    • 原创:55篇
    • 转载:1篇
    • 译文:0篇
    • 评论:0条