POJ-1384 Piggy-Bank 多重背包变形
题意
给我们一个容器的容量m n个物品 每个物品有不同的花费和价值 问我们再每个物品无限个的情况下 最后正好装满最后得到的最小价值是多少 如果装不满 就输出impossible
分析
目标状态:最小价值策略
限制条件:正好装满m的容量
多重背包模型
每个物品可以选择无限个 但是又要求恰好装满
满足最小价值策略我们应该取min 所以应把结果数组初始化无穷大 不然无法选出最小值
遵循递推式为dp[i] = min(dp[i],dp[i-cost[x]]+value[x]的选择策略
但是设置inf后发现我们每次操作的元素都是inf 其中最小的元素也就是inf无法得到正解
所以把dp[0]初始化为0,其他位置inf
因为只有把dp[0]初始化为0
我们在递推式中不断选择物品才能将dp数组更新 不然永远为inf
最后如果能装到m的位置m必然不等于inf
而且会不断取最小
都是从dp[0] = 0扩展出来的
所以为了最小策略我们需要不断取最小
code
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
int w[510],p[510];
typedef long long ll;
const ll inf = (1<<31)-1;
ll dp[10010];int main()
{
// cout<<inf<<endl; int t;scanf("%d",&t);while(t--){int e,f;scanf("%d%d",&e,&f);int m = f-e;int q;scanf("%d",&q);for(int i=1;i<=q;i++)scanf("%d%d",&p[i],&w[i]);for(int i=1;i<=m;i++)dp[i] = inf;dp[0]=0;for(int i=1;i<=q;i++){for(int j=w[i];j<=m;j++){dp[j] = min(dp[j],dp[j-w[i]]+p[i]);}}if(dp[m]!=inf)printf("The minimum amount of money in the piggy-bank is %d.\n",dp[m]);else printf("This is impossible.\n");memset(dp,0,sizeof(dp));}return 0;
}
POJ-1384 Piggy-Bank 多重背包变形相关推荐
- POJ 2392 Space Elevator(多重背包变形)
Q: 额外添加了最大高度限制, 需要根据 alt 对数据进行预处理么? A: 是的, 需要根据 alt 对数组排序 Description The cows are going to space! T ...
- POJ 1014 Dividing(多重背包 + 倍增优化)
题意: 求一种划分方案使结果最公平. 思路: 多重背包,然后把物品分为 2^0, 2^1, ... , 2^k,... 等. #include <iostream> #include &l ...
- POJ 1014 Dividing【多重背包+二进制优化】
大意: 价值1, 2, 3, --, 6的物品分别a1, a2, --, a5, a6件 问能否把这些物品分成两份,使其具有相同的价值(所有物品必须全部用上) 分析: 给个物品有多件,即多重背包 只要 ...
- poj 2063 Investment(01背包变形)
http://poj.org/gotoproblem?pid=2063 (1)上限 m 一直上升的 n 次01背包问题,比一般的01背包多了一重循环: (2)本题出现了各种错误:1)刚开始,没注意 m ...
- poj 1252 Euro Efficiency (01背包变形)
http://poj.org/gotoproblem?pid=1252 (1)不是单纯的01背包问题,硬币有去有回(即有正有负),这使得用想买你的解法,上限难以确定,所以我开了dp[10000]的数组 ...
- piggy bank 完全背包
题目描述 Before ACM can do anything, a budget must be prepared and the necessary financial support obtai ...
- 动态规划 背包问题小结 0-1背包(采药 九度第101题) 完全背包(Piggy-Bank POJ 1384) 多重背包(珍惜现在,感恩生活 九度第103题)
本小结介绍0-1背包.完全背包以及多重背包问题 记忆要点: 0-1背包:二维数组情况下,顺序遍历体积或者倒序均可以 降维情况下需倒序遍历体积 完全背包:数组降维+顺序遍历 ...
- POJ 1742 Coins ( 经典多重部分和问题 DP || 多重背包 )
题意 : 有 n 种面额的硬币,给出各种面额硬币的数量和和面额数,求最多能搭配出几种不超过 m 的金额? 分析 : 这题可用多重背包来解,但这里不讨论这种做法. 如果之前有接触过背包DP的可以自然想到 ...
- (多重背包+记录路径)Charlie's Change (poj 1787)
http://poj.org/problem?id=1787 描述 Charlie is a driver of Advanced Cargo Movement, Ltd. Charlie dri ...
最新文章
- 大数据独角兽TOP10榜单发布,“内永洪,外Tableau”领跑BI领域
- windows下用pycharm安装tensorflow简易教程
- 函数return,有些地方你可能还没掌握
- 信号的基本概念以及信号的产生
- 自动提示_EXCEL2013版突然打不开,自动修复提示1907错误
- js关闭setInterval及终止ajax请求
- 第二:RobotFrameWork接口用例设计规范
- c51转汇编语言窗口,在C51语言中如何嵌入汇编语言
- 3 年后端、4 年前端,聊聊用户认证鉴权
- camunda流程定义表无数据_【经验】数据可视化分析操作指南
- 磁盘转换:电脑动态盘转换基本盘怎么操作?
- Android Studio创建AVD教程
- i春秋web-Backdoor(.git泄露、vim备份泄露、代码审计)
- jmeter性能测试之分布式
- 如何使用python获取Windows 10精美的桌面壁纸
- Chrome | BookMarks
- 不用找,你想要的酒店餐饮su模型素材都在这里
- python画图大全_python画图教程
- 35美元与35万美元
- LATEX编辑高数基础公式
热门文章
- Python:IndentationError: unexpected indent
- Mapreduce执行过程分析(基于Hadoop2.4)——(一)
- oracle调整Lock_sga参数而不使用虚拟内存
- 5、jeecg 笔记之 minidao 条件判断
- Alibaba Druid连接池接入
- web编程 模块1 html,PYcore python programming笔记C20 Web编程
- postgresql查询mysql库_postgresql 查看数据库,表,索引,表空间以及大小
- mysql5.7.11 创建用户_修改更新查找MySQL5.7.x的root用户的默认密码
- 消息长度_填坑笔记:RocketMQ消息订阅失败问题?
- 数据结构与算法实战-C++实现