codevs3269 混合背包 x
3269 混合背包
背包体积为V ,给出N个物品,每个物品占用体积为Vi,价值为Wi,每个物品要么至多取1件,要么至多取mi件(mi > 1) , 要么数量无限 , 在所装物品总体积不超过V的前提下所装物品的价值的和的最大值是多少?
第一行两个数N,V,下面N行每行三个数Vi,Wi,Mi表示每个物品的体积,价值与数量,Mi=1表示至多取一件,Mi>1表示至多取Mi件,Mi=-1表示数量无限
1个数Ans表示所装物品价值的最大值
2 10
3 7 2
2 4 -1
22
对于100%的数据,V <= 200000 , N <= 200
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstring>
#include <cmath>
using namespace std; const int M = 2e5 + ;
const int N = ;
int V,n;
int dp[M]; struct Bag {
int v,w,m;
}t[N]; int main()
{
scanf("%d%d",&n,&V);
for(int i=,v,w,m;i<=n;i++)
{
scanf("%d%d%d",&v,&w,&m);
if(m==-) m=V/v;
t[i].v=v,t[i].w=w,t[i].m=m;
}
for(int i=,mi,vi,wi;i<=n;i++)
{
mi=t[i].m,vi=t[i].v,wi=t[i].w;
for(int k=;k<=mi;k++)
for(int j=V;j>=k*vi;j--)
dp[j]=max(dp[j],dp[j-k*vi]+k*wi);
}
printf("%d",dp[V]);
return ;
}
2)正解
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstring>
#include <cmath>
using namespace std; const int M = 2e5 + ;
const int N = ;
int V,n;
int dp[M]; inline void zeroonebag(int v,int w) {
for(int i=V;i>=v;i--)
dp[i]=max(dp[i],dp[i-v]+w);
} inline void completebag(int v,int w) {
for(int i=v;i<=V;i++)
dp[i]=max(dp[i],dp[i-v]+w);
} inline void multibag(int v,int w,int m) {
if(v*m>=V) {
completebag(v,w);
return;
}
int k=;
while(k<=m)
{
zeroonebag(k*v,k*w);
m-=k;
k<<=;///等价于*2
}
zeroonebag(m*v,m*w);
} int main()
{
scanf("%d%d",&n,&V);
for(int i=,v,w,m;i<=n;i++)
{
scanf("%d%d%d",&v,&w,&m);
if(m==)
zeroonebag(v,w);
else
if(m==-)
completebag(v,w);
else
multibag(v,w,m);
}
printf("%d",dp[V]);
return ;
}
codevs3269 混合背包 x的更多相关文章
- [codevs3269]混合背包
题目大意:一道混合背包模板. 解题思路:分三种情况讨论,01和完全没什么问题,多重背包需要把物品分成$\log W[i]$件,然后01即可,分成W[i]件01会TLE. 读优大法好! C++ Code ...
- CODEVS3269混合背包+二进制优化
codevs 3296 http://codevs.cn/problem/3269/ 题目描述 Description 背包体积为V ,给出N个物品,每个物品占用体积为Vi,价值为Wi,每个物品要么至 ...
- HDU 3535 AreYouBusy (混合背包)
题意:给你n组物品和自己有的价值s,每组有l个物品和有一种类型: 0:此组中最少选择一个 1:此组中最多选择一个 2:此组随便选 每种物品有两个值:是需要价值ci,可获得乐趣gi 问在满足条件的情况下 ...
- HDU 3535 分组混合背包
http://acm.hdu.edu.cn/showproblem.php?pid=3535 题意:有n组工作,T时间,每个工作组中有m个工作,改组分类是s,s是0是组内至少要做一件,是1时最多做一件 ...
- Codevs 3269 混合背包(二进制优化)
3269 混合背包 时间限制: 1 s 空间限制: 256000 KB 题目等级 : 钻石 Diamond 传送门 题目描述 Description 背包体积为V ,给出N个物品,每个物品占用体积为V ...
- HDU 3535 AreYouBusy(混合背包)
HDU3535 AreYouBusy(混合背包) http://acm.hdu.edu.cn/showproblem.php?pid=3535 题意: 给你n个工作集合,给你T的时间去做它们.给你m和 ...
- codevs 3269 混合背包(复习混合背包)
传送门 [题目大意]给出物品的数量.-1为无限个. [思路]混合背包.... [code] #include<iostream> #include<cstdio> #inclu ...
- HDU3535 AreYouBusy 混合背包
题目大意 给出几组物品的体积和价值,每组分为三种:0.组内物品至少选一个:1.组内物品最多选一个:2.组内物品任意选.给出背包容量,求所能得到的最大价值. 注意 仔细审题,把样例好好看完了再答题,否则 ...
- CODE[VS] 3269 混合背包
3269 混合背包 时间限制: 1 s 空间限制: 256000 KB 题目等级 : 钻石 Diamond 题解 查看运行结果 题目描述 Description 背包体积为V ,给出N ...
随机推荐
- Elasticsearch多集群数据同步
有时多个Elasticsearch集群避免不了要同步数据,网上查找了下数据同步工具还挺多,比较常用的有:elasticserach-dump.elasticsearch-exporter.logsta ...
- lua加载DLL
.cpp //若没有在项目属性--库文件.依赖文件.包含添加.则添加一下路径 #pragma comment (lib,"lua5.1.lib") #include " ...
- websocket vue
/* eslint-disable */ let tt; let count = 1; let lockReconnect = false; function isJsonString(str) { ...
- shiro学习(三,shiro加密)
shiro加密 使用MD5加密 认证 //自定义的Realm 域 public class CustomRealmSecret extends AuthorizingRealm { @Overrid ...
- O040、Migrate Instance 操作详解
参考https://www.cnblogs.com/CloudMan6/p/5538599.html Migrate 操作的作用是将instance 从当前的计算节点迁移到其他的计算节点上. ...
- 销售订单(SO)-API-登记销售订单
登记销售订单可以在新增订单的时候就登记:并不是去修改 flow_status 为booked,而是赋值action request:就下面两句 l_action_request_tbl(l_actio ...
- TVM调试指南
1. TVM安装 这部分之前就写过,为了方便,这里再复制一遍. 首先下载代码 git clone --recursive https://github.com/dmlc/tvm 这个地方最好使用--r ...
- 自己Linux东西存放情况
elasticsearch /home/panfeng 包含了 elasticsearch 和 ik分词器 FastDFS https://www.cnblogs.com/taopanfeng/p/1 ...
- 关于php的发展前景
php7 宣称速度比php5.6快两倍,宣称要打破一切旧规则 2015年,php 7.0发布 2016年,php 7.1发布 2017年,php 7.2发布 2018年,php 7.3发布 2019年 ...
- deep_learning_Dropout
吴恩达深度学习笔记(十一)—— dropout正则化 主要内容: 一.dropout正则化的思想 二.dropout算法流程 三.dropout的优缺点 一.dropout正则化的思想 在神经网络中, ...