51nod 1086 背包问题 V2(多重背包)
2016-03-28 00:09
387 查看
有N种物品,每种物品的数量为C1,C2......Cn。从中任选若干件放在容量为W的背包里,每种物品的体积为W1,W2......Wn(Wi为整数),与之相对应的价值为P1,P2......Pn(Pi为整数)。求背包能够容纳的最大价值。
Input
Output
Input示例
Output示例
Input
第1行,2个整数,N和W中间用空格隔开。N为物品的种类,W为背包的容量。(1 <= N <= 100,1 <= W <= 50000) 第2 - N + 1行,每行3个整数,Wi,Pi和Ci分别是物品体积、价值和数量。(1 <= Wi, Pi <= 10000, 1 <= Ci <= 200)
Output
输出可以容纳的最大价值。
Input示例
3 6 2 2 5 3 3 8 1 4 1
Output示例
9
#include <iostream> #include <cstring> #include <cstdlib> #include <cstdio> #include <string> #include <cmath> #include <set> #include <queue> #include <algorithm> #include <vector> #include <map> using namespace std; #define esp 1e-8 const double PI = acos(-1.0); const int inf = 1000000005; const long long mod = 1000000007; //freopen("in.txt","r",stdin); //输入重定向,输入数据将从in.txt文件中读取 //freopen("out.txt","w",stdout); //输出重定向,输出数据将保存在out.txt文件中 int w[105], p[105], c[105], n, W; long long dp[50005]; void ZeroPack(int ww, int v) { for (int i = W; i >= ww; --i) dp[i] = max(dp[i], dp[i - ww] + v); } void CompletePack(int ww, int v) { for (int i = ww; i <= W; ++i) { dp[i] = max(dp[i], dp[i - ww] + v); } } void MutiplePack(int ww, int v, int num) { if (ww * num >= W) { CompletePack(ww, v); return; } int k = 1; while (k < num) { ZeroPack(ww * k, v * k); num -= k; k <<= 1; } ZeroPack(ww * num, v * num); } int main() { while (~scanf("%d%d", &n, &W)) { for (int i = 1; i <= n; ++i) { scanf("%d%d%d", &w[i], &p[i], &c[i]); } memset(dp, 0, sizeof(dp)); for (int i = 1; i <= n; ++i) { MutiplePack(w[i], p[i], c[i]); } printf("%lld\n", dp[W]); } }
相关文章推荐
- MongoClient类参考文档
- ionic准备之angular基础——dom操作相关(6)
- JDBC的事务(简单例子示范)
- 24. Swap Nodes in Pairs
- MVC |Web API | HttpClent
- java发送http请求 自动预约MZD记念馆团体票 分析第一步自动登陆carles抓包
- Jenkins(三)RF插件使用
- 第4周作业 邱鹏 2013551628
- MyBatis:4
- Java 引用
- spring mvc 学习笔记【1】---前言
- 《CMOS集成电路后端设计与实战》读书笔记
- MyBatis:3
- next_Permutation 全排列
- hadoop上传文件功能实例代码
- 最新密码验证正则表达式
- ASP.NET通过byte正确安全的判断上传文件格式
- ASP.NET 5已终结,迎来ASP.NET Core 1.0和.NET Core 1.0
- ASP.NET实现QQ、微信、新浪微博OAuth2.0授权登录 原创
- 详解ASP.NET MVC Form表单验证