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 ...
随机推荐
- H5C3--sessionStorage和localStorage的使用
一.sessionStorage的使用 <!DOCTYPE html> <html lang="en"> <head> <meta cha ...
- 使用openpyxl模块时出现错误: zipfile.BadZipFile: File is not a zip file
通过Pycharm工具新建一个xlsx文件. 再通过openpyxl模块读取该表时,报错: zipfile.BadZipFile: File is not a zip file 如下所示: 解决办法: ...
- python实现六大分群质量评估指标(兰德系数、互信息、轮廓系数)
python实现六大分群质量评估指标(兰德系数.互信息.轮廓系数) 1 R语言中的分群质量--轮廓系数 因为先前惯用R语言,那么来看看R语言中的分群质量评估,节选自笔记︱多种常见聚类模型以及分群质量评 ...
- dijkstra算法为什么不能有负边?
因为Dijkstra算法在计算最短路径时,不会因为负边的出现而更新已经计算过(收录过)的顶点的路径长度, 这样一来,在存在负边的图中,就可能有某些顶点最终计算出的路径长度不是最短的长度. 假设前两个数 ...
- 最短路 HDU - 2544 (dijkstra算法或Floyd算法)
Dijkstra解法: #include <stdio.h> #include <iostream> #include <cstring> #include < ...
- 使用fast-json-stringify代替JSON.stringify
使用JSON.stringify的思考 使用过JSON对象的程序员最常做的一项工作便是,将JSON对象转化为字符串.该字符串的用途很多,例如可以使用在WEB的URL中,在多个页面间进行传递. cons ...
- 使用C3P0和DBUtils
1.导包 2.配置c3p0-config.xml <?xml version="1.0" encoding="UTF-8"?> <c3p0-c ...
- larbin终于编译完成
1.目前sourceforge不能下载,只能找mirror进行下载了: 2.一些头文件始终找不到,定位了一下,应该是makefile中设置有问题,把CXXFLAGS中的-I-去掉,即可编译成功:
- day39-Spring 02-AOP的概述
横向抽取的机制其实就是代理机制.对UserDao生成一个代理类:UserDaoProxy.被代理对象和代理对象它俩实现相同的接口它俩肯定是平级的,这就是横向抽取的机制.如果这时候调用UserDao的 ...
- (译)Objective-C的动态特性
这是一篇译文,原文在此,上一篇文章就是受这篇文章启发,这次干脆都翻译过来. 过去的几年中涌现了大量的Objective-C开发者.有些是从动态语言转过来的,比如Ruby或Python,有些是从强类型 ...