HDU 1114 完全背包 HDU 2191 多重背包
HDU 1114 Piggy-Bank 完全背包问题、
想想我们01背包是逆序遍历是为了保证什么?
保证每件物品只有两种状态,取或者不取.那么正序遍历呢? 这不就正好满足完全背包的条件了吗
means:给出小猪钱罐的重量和装满钱后的重量,然后是几组数据,每组数据包括每种钱币的价值与重量要求出装满钱罐时的最小价值
#include<cstdio>
#include<cstring>
#include<cmath>
#include<iostream>
using namespace std;
const int qq=+;
const int MAX=1e8;
int dp[qq];
int v[qq],p[qq];
int main()
{
int t;scanf("%d",&t);
while(t--){
int a,b;scanf("%d%d",&a,&b);
int c=b-a;
int n;scanf("%d",&n);
for(int i=;i<n;++i)
scanf("%d%d",&p[i],&v[i]);
for(int i=;i<=c;++i)
dp[i]=MAX;
dp[]=;
for(int i=;i<n;++i)
for(int j=v[i];j<=c;++j)
dp[j]=min(dp[j],dp[j-v[i]]+p[i]);
if(dp[c]==MAX) printf("This is impossible.\n");
else printf("The minimum amount of money in the piggy-bank is %d.\n",dp[c]);
}
return ;
}
HDU 2191 多重背包问题、
其实还是应用01背包的思想、不过这里有一个小技巧就是二进制表示法、
比如 13、可以表示成 1+2+4+5 这4个数可以组成1到13之间的任意一个数、
那么就可以多重背包拆分成01背包问题、
千万注意将空间压缩成一维的话是逆序遍历、这里解释一下 dp数组中的每一个值都是一种状态,该种状态在当前是独立的不受其他影响的,如果正序遍历的话前面得到的一些状态影响其他状态的生成、
- -、我是这么理解的、 总之你要dp的话就是... 唉本弱弱语文水平好差、
联想一下二维数组下是怎么更新状态的、再看看一维、这样就很容易理解了
#include<cstdio>
#include<cmath>
#include<cstring>
#include<iostream>
using namespace std;
const int qq=;
int p[qq],v[qq];
int dp[qq];
int main()
{
int t;scanf("%d",&t);
while(t--){
int price,kind;
scanf("%d%d",&price,&kind);
int count=;
int a,b,c;
for(int i=;i<kind;++i){
scanf("%d%d%d",&a,&b,&c);
int t=;
while(c>=t){
p[count]=a*t;
v[count++]=b*t;
c=c-t;
t=t<<;
}
if(c){
p[count]=a*c;
v[count++]=b*c;
}
}
for(int j,i=;i<count;++i)
for(j=price;j>=p[i];--j)
dp[j]=max(dp[j],dp[j-p[i]]+v[i]);
printf("%d\n",dp[price]);
memset(dp,,sizeof(dp)); //一定记得初始化、毕竟有很多组数据、
}
return ;
}
HDU 1114 完全背包 HDU 2191 多重背包的更多相关文章
- hdu 2191 (多重背包+二进制优化)
Problem Description 急!灾区的食物依然短缺!为了挽救灾区同胞的生命,心系灾区同胞的你准备自己采购一些粮食支援灾区,现在假设你一共有资金n元,而市场有m种大米,每种大米都是袋装产品, ...
- HDU 3591 The trouble of Xiaoqian(多重背包+全然背包)
HDU 3591 The trouble of Xiaoqian(多重背包+全然背包) pid=3591">http://acm.hdu.edu.cn/showproblem.php? ...
- hdu 2191 多重背包 悼念512汶川大地震遇难同胞——珍惜现在,感恩生活
http://acm.hdu.edu.cn/showproblem.php?pid=2191 New~ 欢迎“热爱编程”的高考少年——报考杭州电子科技大学计算机学院关于2015年杭电ACM暑期集训队的 ...
- hdu 2191多重背包
悼念512汶川大地震遇难同胞——珍惜现在,感恩生活 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Jav ...
- hdu 6092 Rikka with Subset(多重背包)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6092 #include <cstdio> #include <iostream> ...
- hdoj 2191(多重背包)
悼念512汶川大地震遇难同胞——珍惜现在,感恩生活 Time Limit : 1000/1000ms (Java/Other) Memory Limit : 32768/32768K (Java/ ...
- hdu 2191 多重背包
悼念512汶川大地震遇难同胞——珍惜现在,感恩生活 Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & ...
- hdu 2191 (多重背包二进制优化)
链接:http://acm.hdu.edu.cn/showproblem.php?pid=2191 实现代码: #include<bits/stdc++.h> using namespac ...
- HDU 1114 Piggy-Bank(动态规划、完全背包)
Piggy-Bank Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total ...
随机推荐
- leetcode 60-80 easy
66.Plus One Given a non-empty array of digits representing a non-negative integer, plus one to the i ...
- MySQL与PostgreSQL比较 哪个数据库更好
最后结论说的好,通常由团队成员的熟悉度来决定: PostgreSQL 的名字很少听到,最近试装发现不是很友好:官方文档写的对新手来说有点坑: 有数据库工作经验的直接看最后一句就可以. 如果打算为项目选 ...
- LintCode_173 链表插入排序
题目 用插入排序对链表排序 样例 Given 1->3->2->0->null, return 0->1->2->3->null C++代码 ListN ...
- 移动端适配之二:visual viewport、layout viewport和ideal viewport介绍
上一篇博文,可算把像素这个东西讲清楚了.在这篇博文里面,将继续介绍viewport相关的内容. 很多博客都会提到PPK所讲的三个viewport,有的讲的比较复杂,看的云里雾里,我这里也大概介绍一下, ...
- 2018-8-15-WPF-插拔触摸设备触摸失效
title author date CreateTime categories WPF 插拔触摸设备触摸失效 lindexi 2018-08-15 08:12:47 +0800 2018-08-09 ...
- python设计模式整理
设计模式的定义:为了解决面向对象系统中重要和重复的设计封装在一起的一种代码实现框架,可以使得代码更加易于扩展和调用 四个基本要素:模式名称,问题,解决方案,效果 六大原则: 1.开闭原则:一个软件实体 ...
- 无线传感网络协议——Smart Mesh IP
前言: SmartMesh IP 专为实现 IP 兼容性而设计,并基于 6LoWPAN 和 802.15.4e 标准.SmartMesh IP 产品线实现了网络适应性.可靠性和可扩展性水平,并拥有高级 ...
- metro扁平UI网页组件
在线演示 本地下载
- Eclipse中提示 找不到类 javax.servlet.http.HttpServletResponse
问题如题, 解决方案如下: 复制tomcat的安装路径下\lib\servlet-api.jar 到WEB-INF/lib下即可.
- 在 Linux Mint 19 上安装 zsh 和设置小键盘一步到位
在 Linux Mint 19 上安装 zsh 和设置小键盘 安装 zsh 并设置 zsh 为默认 shell 安装 sudo apt install zsh 设置 zsh 为默认 shell,注意没 ...