【题目描述】

一个旅行者有一个最多能装V公斤的背包,现在有n件物品,它们的重量分别是W1,W2,...,Wn,它们的价值分别为C1,C2,...,Cn。有的物品只可以取一次(01背包),有的物品可以取无限次(完全背包),有的物品可以取的次数有一个上限(多重背包)。求解将哪些物品装入背包可使这些物品的费用总和不超过背包容量,且价值总和最大。

【输入】

第一行:二个整数,M(背包容量,M≤200),N(物品数量,N≤30);

第2..N+1行:每行三个整数Wi,Ci,Pi,前两个整数分别表示每个物品的重量,价值,第三个整数若为0,则说明此物品可以购买无数件,若为其他数字,则为此物品可购买的最多件数(Pi)。

【输出】

仅一行,一个数,表示最大总价值。

【输入样例】

10  3
2  1  0
3  3  1
4  5  4

【输出样例】

11

【源程序】

#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
#include<string>
#include<cstdlib>
#include<queue>
#include<vector>
#define INF 0x3f3f3f3f
#define PI acos(-1.0)
#define N 10001
#define MOD 2520
#define E 1e-12
using namespace std;
int m,n;
int w[N],c[N],num[N],f[N];
void ZeroOnePack(int cost,int weight)
{for(int v=m;v>=weight;v--)f[v]=max(f[v],f[v-weight]+cost);
}
void CompletePack(int cost,int weight)
{for(int v=weight;v<=m;v++)f[v]=max(f[v],f[v-weight]+cost);
}
void MultiplePack(int cost,int weight,int num)
{for(int j=m;j>=0;j--)for(int k=0;k<=num;k++)if(j-k*weight>=0)f[j]=max(f[j],f[j-k*weight]+k*cost);
}
int main()
{cin>>m>>n;for(int i=1;i<=n;i++)cin>>w[i]>>c[i]>>num[i];for(int i=1;i<=n;i++){if(num[i]==1)//0-1背包ZeroOnePack(c[i],w[i]);else if(num[i]==0)//完全背包CompletePack(c[i],w[i]);else//多重背包MultiplePack(c[i],w[i],num[i]);}cout<<f[m]<<endl;return 0;
}

混合背包(信息学奥数一本通-T1270)相关推荐

  1. 信息学奥数一本通(1170:计算2的N次方)

    1170:计算2的N次方 时间限制: 1000 ms         内存限制: 65536 KB 提交数: 15778     通过数: 8179 [题目描述] 任意给定一个正整数N(N<=1 ...

  2. 信息学奥数一本通(1004:字符三角形)

    1004:字符三角形 时间限制: 1000 ms         内存限制: 66536 KB 提交数: 107002     通过数: 58798 [题目描述] 给定一个字符,用它构造一个底边长5个 ...

  3. 买书(信息学奥数一本通-T1293)

    [题目描述] 小明手里有n元钱全部用来买书,书的价格为10元,20元,50元,100元. 问小明有多少种买书方案? [输入] 第一行为n和m.一个整数 n,代表总共钱数.(0 ≤ n ≤ 1000) ...

  4. 货币系统(信息学奥数一本通-T12973)

    [题目描述] 给你一个n种面值的货币系统,求组成面值为m的货币有多少种方案. [输入] 第一行为n和m. [输出] 一行,方案数. [输入样例] 3 10        //3种面值组成面值为10的方 ...

  5. 完全背包问题(信息学奥数一本通-T1268)

    [题目描述] 设有n种物品,每种物品有一个重量及一个价值.但每种物品的数量是无限的,同时有一个背包,最大载重量为M,今从n种物品中选取若干件(同一种物品可以多次选取),使其重量的和小于等于M,而价值的 ...

  6. 信息学奥数一本通 1212:LETTERS 搜索与回溯(耙耙)

    1212:LETTERS 时间限制: 1000 ms 内存限制: 65536 KB 提交数: 11866 通过数: 5252 [题目描述] 给出一个roe×col的大写字母矩阵,一开始的位置为左上角, ...

  7. 数字组合(信息学奥数一本通-T1291)

    [题目描述] 有n个正整数,找出其中和为t(t也是正整数)的可能的组合方式.如: n=5,5个数分别为1,2,3,4,5,t=5: 那么可能的组合有5=1+4和5=2+3和5=5三种组合方式. [输入 ...

  8. 庆功会(信息学奥数一本通-T1269)

    [题目描述] 为了庆贺班级在校运动会上取得全校第一名成绩,班主任决定开一场庆功会,为此拨款购买奖品犒劳运动员.期望拨款金额能购买最大价值的奖品,可以补充他们的精力和体力. [输入] 第一行二个数n(n ...

  9. 清华大学计算机陈立杰,他15岁考入清华,被称为“信息学奥数天才”,一句话让所有人感动...

    原标题:他15岁考入清华,被称为"信息学奥数天才",一句话让所有人感动 前段时间,网上被一段清华大学特将奖学金答辩的视频刷频,各路"神仙"除了各种满分成绩外,还 ...

最新文章

  1. 当莎士比亚遇见Google Flax:教你用​字符级语言模型和归递神经网络写“莎士比亚”式句子...
  2. ResultSet 的相关介绍
  3. hadoop博客 oschina
  4. 【转载】关于RabbitMQ的高可用性
  5. ZZULIOJ 1058: 求解不等式
  6. 魅族营销翻车,被骂上热搜,官博致歉并暂停运营两天...
  7. zabbix第一篇:zabbix安装及使用
  8. 转太强了!一文讲透了标准Web系统的架构分层~
  9. 全源最短路径 - floyd算法 - O(N ^ 3)
  10. 6. access_token
  11. 微信3D小游戏已达数百款,这里肯定有你没玩过的小游戏!
  12. 想学PLC编程,先弄清5种PLC专用语言
  13. sklearn学习——递归特征消除法(RFE)
  14. iOS前后台切换和监听
  15. MT管理系去弹窗【失败】
  16. 自然语言处理3 -- 词性标注
  17. 2 | TGA文件格式分析
  18. elasticsearch7.x catAPI之indices
  19. Ubuntu安装wordpress教程
  20. RT-Thread移植到STM32单片机过程

热门文章

  1. Makefile之嵌套执行(9)
  2. 你觉得我的这段Java代码还有优化的空间吗?
  3. 从生产故障解锁RocketMQ集群部署的最佳实践
  4. 八点建议写出优雅的 Java 代码
  5. FastJson稍微使用不当就会导致StackOverflow
  6. 再有人问你为什么MySQL用B+树做索引,就把这篇文章发给她
  7. 15岁中国学生斩获苹果WWDC奖学金:写代码只用了2个周末
  8. jeecg怎么样好用吗?
  9. 编程体系结构(09):分布式系统架构
  10. Hadoop框架:HDFS简介与Shell管理命令