题目链接: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 多重背包 二进制优化的更多相关文章

  1. [poj 1276] Cash Machine 多重背包及优化

    Description A Bank plans to install a machine for cash withdrawal. The machine is able to deliver ap ...

  2. POJ 1276 Cash Machine(多重背包的二进制优化)

    题目网址:http://poj.org/problem?id=1276 思路: 很明显是多重背包,把总金额看作是背包的容量. 刚开始是想把单个金额当做一个物品,用三层循环来 转换成01背包来做.T了… ...

  3. Cash Machine (POJ 1276)(多重背包——二进制优化)

    链接:POJ - 1276 题意:给你一个最大金额m,现在有n种类型的纸票,这些纸票的个数各不相同,问能够用这些纸票再不超过m的前提下凑成最大的金额是多少? 题解:写了01背包直接暴力,结果T了,时间 ...

  4. Poj 1276 Cash Machine 多重背包

    Cash Machine Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 26172   Accepted: 9238 Des ...

  5. POJ 1276 Cash Machine(单调队列优化多重背包)

    Cash Machine Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 38986   Accepted: 14186 De ...

  6. POJ 1014 Dividing(多重背包+二进制优化)

    http://poj.org/problem?id=1014 题意:6个物品,每个物品都有其价值和数量,判断是否能价值平分. 思路: 多重背包.利用二进制来转化成0-1背包求解. #include&l ...

  7. poj 1276 Cash Machine_多重背包

    题意:略 多重背包 #include <iostream> #include<cstring> #include<cstdio> using namespace s ...

  8. hdu1059 dp(多重背包二进制优化)

    hdu1059 题意,现在有价值为1.2.3.4.5.6的石头若干块,块数已知,问能否将这些石头分成两堆,且两堆价值相等. 很显然,愚蠢的我一开始并想不到什么多重背包二进制优化```因为我连听都没有听 ...

  9. HDOJ(HDU).2844 Coins (DP 多重背包+二进制优化)

    HDOJ(HDU).2844 Coins (DP 多重背包+二进制优化) 题意分析 先把每种硬币按照二进制拆分好,然后做01背包即可.需要注意的是本题只需要求解可以凑出几种金钱的价格,而不需要输出种数 ...

随机推荐

  1. Hihocoder1061-Beautiful String

    时间限制:10000ms单点时限:1000ms内存限制:256MB 描述 We say a string is beautiful if it has the equal amount of 3 or ...

  2. Java通过UUID随机生成36位、32位唯一识别码(唯一字符串)

    import java.util.UUID; /** * 通过UUID随机生成36位.32位唯一识别码(唯一字符串) * @author [J.H] * */ public class Test { ...

  3. to_string函数(将数字转换成字符串)

    一般常用的转换字符串的方法std::stringstream,但是效率较低;目前C ++11提供了std::to_string 效率方面:C风格的sprintf()没有动态分配内存效率最高;std:: ...

  4. 06 ASP.net

    ASP.net 第一天 理解浏览器与服务器概念,与WinForm的区别. C# IIS(Internet Information Service) 互联网信息服务 Java(Tomcat) Php(A ...

  5. Oracle-Trigger-Insert tableA and tableB

    create or replace trigger trg_a after insert ON a for each rowbegin   INSERT INTO b values(:NEW.ID,: ...

  6. 转载一遍比较好的,django2.1搭建博客教程

    非常感谢这位博主,找了几个星期终于找到了 https://www.dusaiphoto.com/article/article-detail/4/

  7. JAVA 重载方法,参数为NULL时,调用的处理 (精确性原则)

    引子:大家可以思考一下下面程序的输出结果 public class TestNull { public void show(String a){ System.out.println("St ...

  8. Unity 多场景打包

    本文章由cartzhang编写,转载请注明出处. 所有权利保留. 文章链接:http://blog.csdn.net/cartzhang/article/details/50580641 作者:car ...

  9. js常用特效-幻灯片

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  10. Redis-server在windows下闪退

    在win7下使用Redis(windows版)很简单,只需要去Git上下载一个压缩包,解压运行即可.但是前段时间发现win10下双击redis-server既然闪退.非常不解... 在观察了错误日志才 ...