杭电-1114 Piggy-Bank(完全背包)
来源:互联网 发布:网络写作平台17k 编辑:程序博客网 时间:2024/05/21 17:23
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1114
状态转移方程:
dp[i][j]=max(dp[i- 1][j],dp[i-1][j-c[i]]+w[i]);
代码:
#include<stdio.h>#include<string.h>#include<math.h>#include<algorithm>using namespace std;int value[510];int weight[510];int dp[100100];int main(){ int t; scanf("%d",&t); while(t--) { int ew,fw; scanf("%d %d",&ew,&fw); int num; scanf("%d",&num); for(int i=1;i<=num;i++) scanf("%d %d",&value[i],&weight[i]); for(int i=0;i<=(fw-ew);i++) dp[i]=500000000; dp[0]=0; for(int i=1;i<=num;i++) { for(int j=weight[i];j<=(fw-ew);j++) { dp[j]=min(dp[j],dp[j-weight[i]]+value[i]); } } if(dp[fw-ew]<500000000) printf("The minimum amount of money in the piggy-bank is %d.\n",dp[fw-ew]); else printf("This is impossible.\n"); } return 0;}
可以发现这个代码和01背包中的不同之处在于第二重循环一个是正序,一个是倒序,这是因为“完全背包的特点恰是每种物品可选无限件,所以在考虑“加
选一件第 i 种物品”这种策略时,却正需要一个可能已选入第 i 种物品的子结果 F[i,v − C i ] ,所以就可以并且必须采用 v 递增的顺序循环”(《背包九讲》)
还有初始化问题~注意一下
ps:楼主是dp菜鸟,觉得看了《背包九讲》学到了很多 ,因为内容很系统,有需要的童鞋也可以去看看哒~~
0 0
- 完全背包 杭电 1114Piggy-Bank
- 杭电-1114 Piggy-Bank(完全背包)
- 杭电OJ1114----------------Piggy-Bank ~完全背包~
- 杭电OJ——1114 Piggy-Bank(完全背包)
- HDU--杭电--1114--Piggy-Bank--背包
- hdu 1114 Piggy-Bank(完全背包)
- hdu 1114 Piggy-Bank(完全背包)
- hdu 1114 Piggy-Bank(完全背包)
- HDU 1114 Piggy-Bank (完全背包)
- HDU 1114 Piggy-Bank (完全背包)
- HDU 1114 Piggy-Bank (完全背包)
- hdu 1114 Piggy-Bank(完全背包)
- hdu 1114 Piggy-Bank (完全背包)
- HDU 1114 Piggy-Bank (完全背包)
- HDU 1114 Piggy-Bank(完全背包)
- HDU - 1114 - Piggy-Bank (完全背包)
- hdu 1114 Piggy-Bank(完全背包)
- hdu 1114 Piggy-Bank(完全背包)
- hbase源码分析HTable ->getScanner(final Scan scan)源码分析
- iOS-数据存储之FMDB
- webGL第四课
- 主键增长策略
- mysql 分表修改语句
- 杭电-1114 Piggy-Bank(完全背包)
- 返回字符串
- centos7下使用yum安装mysql
- [XUPort笔记]修改的XUPorter,提供代码编辑
- 如何在交互式python下重复最近输入
- iOS7初体验(3)——图像资源Images Assets
- HTTPS和HTTP的区别
- APP性能优化基础
- Myeclipse快捷键记录