POJ-1276 Cash Machine 多重背包 二进制优化
题目链接:https://cn.vjudge.net/problem/POJ-1276
题意
懒得写了自己去看好了,困了赶紧写完这个回宿舍睡觉,明早还要考试。
思路
多重背包的二进制优化。
思路是将n个物品拆分成log(m)个物品,可使得这些物品组合出1~n个原物品,这个用于01背包中。
提交过程
WA | 没理解num-=k |
AC |
代码
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
const int maxn=1000+20, maxm=10+20, maxc=1e5+20;
int cash[maxm], num[maxn], dp[maxc], total, n;
char str[500];
void compKnap(int cost, int weight){
for (int i=cost; i<=total; i++)
dp[i]=max(dp[i], dp[i-weight]+cost);
}
void zeroKnap(int cost, int weight){
for (int i=total; i>=cost; i--)
dp[i]=max(dp[i], dp[i-weight]+cost);
}
int main(void){
while (scanf("%d%d", &total, &n)==2){
for (int i=0; i<n; i++)
scanf("%d%d", &num[i], &cash[i]);
memset(dp, 0, sizeof(dp));
for (int i=0; i<n; i++){
if (num[i]*cash[i]>=total){
compKnap(cash[i], cash[i]);
}else{
int k=1;
for (int k=1; k<num[i]; k*=2){
zeroKnap(cash[i]*k, cash[i]*k);
num[i]-=k;
}
zeroKnap(cash[i]*num[i], cash[i]*num[i]);
}
}
printf("%d\n", dp[total]);
}
return 0;
}
Time | Memory | Length | Lang | Submitted |
---|---|---|---|---|
47ms | 552kB | 1063 | C++ | 2018-08-10 09:24:56 |
POJ-1276 Cash Machine 多重背包 二进制优化的更多相关文章
- [poj 1276] Cash Machine 多重背包及优化
Description A Bank plans to install a machine for cash withdrawal. The machine is able to deliver ap ...
- POJ 1276 Cash Machine(多重背包的二进制优化)
题目网址:http://poj.org/problem?id=1276 思路: 很明显是多重背包,把总金额看作是背包的容量. 刚开始是想把单个金额当做一个物品,用三层循环来 转换成01背包来做.T了… ...
- Cash Machine (POJ 1276)(多重背包——二进制优化)
链接:POJ - 1276 题意:给你一个最大金额m,现在有n种类型的纸票,这些纸票的个数各不相同,问能够用这些纸票再不超过m的前提下凑成最大的金额是多少? 题解:写了01背包直接暴力,结果T了,时间 ...
- Poj 1276 Cash Machine 多重背包
Cash Machine Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 26172 Accepted: 9238 Des ...
- POJ 1276 Cash Machine(单调队列优化多重背包)
Cash Machine Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 38986 Accepted: 14186 De ...
- POJ 1014 Dividing(多重背包+二进制优化)
http://poj.org/problem?id=1014 题意:6个物品,每个物品都有其价值和数量,判断是否能价值平分. 思路: 多重背包.利用二进制来转化成0-1背包求解. #include&l ...
- poj 1276 Cash Machine_多重背包
题意:略 多重背包 #include <iostream> #include<cstring> #include<cstdio> using namespace s ...
- hdu1059 dp(多重背包二进制优化)
hdu1059 题意,现在有价值为1.2.3.4.5.6的石头若干块,块数已知,问能否将这些石头分成两堆,且两堆价值相等. 很显然,愚蠢的我一开始并想不到什么多重背包二进制优化```因为我连听都没有听 ...
- HDOJ(HDU).2844 Coins (DP 多重背包+二进制优化)
HDOJ(HDU).2844 Coins (DP 多重背包+二进制优化) 题意分析 先把每种硬币按照二进制拆分好,然后做01背包即可.需要注意的是本题只需要求解可以凑出几种金钱的价格,而不需要输出种数 ...
随机推荐
- Mac Dropbox 文件不显示同步图标 解决
前言 开始时关了这个功能,今天想打开发现怎么也恢复不了. 按照官方教程说的重装也无济于事.最后在官方BBS发现一篇帖子顺利解决了问题 解决方案 这哥们意思是说禁用了一个Finder的插件就好了(有意思 ...
- VMware虚拟机共享文件夹
安装好虚拟文件夹后,第二次开机时发现/mnt/hgfs目录下找不到共享的文件夹,原因是vmfg-fuse服务没有开启. 在root的配置文件中添加如下代码,设置开机自启: /usr/bin/vmhgf ...
- easyui的增删改
陈旧的开发模式PM:“我要这个功能”后端:“这个先找前端做个模板”前端:“模板做完了”后端:“我来对接一下,这里样式不对”前端:“我改完了”后端:“功能交付”PM:“春节要加这个活动”后端:“这个先找 ...
- Hibernate---criteria的具体使用列子
方法 说明 Restrictions.eq = Restrictions.allEq 利用Map来进行多个等于的限制 Restrictions.gt > Restrictions.ge > ...
- Codeforces Round #499 (Div. 2) D. Rocket_交互题_二分
第一次作交互题,有点不习惯. 由于序列是循环的,我们可以将一半的机会用于判断当前是否是在说谎,另一半的机会用于二分的判断. 对于判断是否实在说谎,用1判断即可.因为不可能有比1还小的数. 本题虽然非常 ...
- Extjs获取input值的几种方法
记录一下: ExtJs获取文本框中值的几种方式 EXTHTML 1.Html文本框 如: 获取值的方式为: var tValue = Ext.getDom('test').value; 或者 var ...
- [中文] 以太坊(Ethereum )白皮书
以太坊(Ethereum ):下一代智能合约和去中心化应用平台 翻译|巨蟹 .少平 译者注|中文读者可以到以太坊爱好者社区(www.ethfans.org)获取最新的以太坊信息. 当中本聪在2009年 ...
- [luogu4195 Spoj3105] Mod (大步小步)
传送门 题目描述 已知数a,p,b,求满足a^x≡b(mod p)的最小自然数x. 输入输出格式 输入格式: 每个测试文件中最多包含100组测试数据. 每组数据中,每行包含3个正整数a,p,b. 当a ...
- [读书笔记] Python数据分析 (三) IPython
1. 什么是IPython IPyhton 本身没有提供任何的计算或者数据分析功能,在交互式计算和软件开发者两个方面最大化地提高生产力,execute-explore instead of edit- ...
- 简述Vue的响应式原理
当一个Vue实例创建时,vue会遍历data选项的属性,用 Object.defineProperty 将它们转为getter/setter并且在内部追踪相关依赖,在属性被访问和修改时通知变化.每个组 ...