1. //Accepted 1100 KB 47 ms
  2. //多重背包
  3. #include <cstdio>
  4. #include <cstring>
  5. #include <iostream>
  6. #include <queue>
  7. #include <cmath>
  8. #include <algorithm>
  9. using namespace std;
  10. /**
  11. * This is a documentation comment block
  12. * 如果有一天你坚持不下去了,就想想你为什么走到这儿!
  13. * @authr songt
  14. */
  15. ;
  16. ;
  17. int dp[imax_v];
  18. int weight[imax_n],amount[imax_n];
  19. int n,v;
  20. int max(int a,int b)
  21. {
  22. return a>b?a:b;
  23. }
  24. void zeroOnePack(int weight,int value,int v)
  25. {
  26. for (int j=v;j>=weight;j--)
  27. dp[j]=max(dp[j],dp[j-weight]+value);
  28. }
  29. void completePack(int weight,int value,int v)
  30. {
  31. for (int j=weight;j<=v;j++)
  32. dp[j]=max(dp[j],dp[j-weight]+value);
  33. }
  34. void multiplePack(int weight,int value,int amount,int v)
  35. {
  36. ;
  37. if (amount*weight>=v)
  38. {
  39. completePack(weight,value,v);
  40. return ;
  41. }
  42. while (k<amount)
  43. {
  44. zeroOnePack(k*weight,k*value,v);
  45. amount-=k;
  46. k<<=;
  47. }
  48. zeroOnePack(amount*weight,amount*value,v);
  49. }
  50. void Dp()
  51. {
  52. ;i<=v;i++) dp[i]=;
  53. ;i<=n;i++)
  54. {
  55. multiplePack(weight[i],weight[i],amount[i],v);
  56. }
  57. ;
  58. ;i<=v;i++)
  59. ans=max(ans,dp[i]);
  60. printf("%d\n",ans);
  61. }
  62. int main()
  63. {
  64. while (scanf("%d%d",&v,&n)!=EOF)
  65. {
  66. ;i<=n;i++)
  67. scanf("%d%d",&amount[i],&weight[i]);
  68. Dp();
  69. }
  70. ;
  71. }

poj1276 多重背包的更多相关文章

  1. POJ-1276 Cash Machine 多重背包 二进制优化

    题目链接:https://cn.vjudge.net/problem/POJ-1276 题意 懒得写了自己去看好了,困了赶紧写完这个回宿舍睡觉,明早还要考试. 思路 多重背包的二进制优化. 思路是将n ...

  2. POJ1276 - Cash Machine(多重背包)

    题目大意 给定一个容量为M的背包以及n种物品,每种物品有一个体积和数量,要求你用这些物品尽量的装满背包 题解 就是多重背包~~~~用二进制优化了一下,就是把每种物品的数量cnt拆成由几个数组成,1,2 ...

  3. POJ1276:Cash Machine(多重背包)

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

  4. POJ1276:Cash Machine(多重背包)

    题目:http://poj.org/problem?id=1276 多重背包模板题,没什么好说的,但是必须利用二进制的思想来求,否则会超时,二进制的思想在之前的博客了有介绍,在这里就不多说了. #in ...

  5. 【POJ1276】Cash Machine(多重背包单调队列优化)

    大神博客转载http://www.cppblog.com/MatoNo1/archive/2011/07/05/150231.aspx多重背包的单调队列初中就知道了但一直没(不会)写二进制优化初中就写 ...

  6. POJ1276【多重背包】

    题意: 给出一个价值sum,然后给出n,代表n个方案,接着n对代表个数与价值,要求最接近sum,但不超过sum的价值. 思路: 多重背包,利用二进制拆分达到保证对于0..n间的每一个整数,均可以用若干 ...

  7. POJ1276Cash Machine[多重背包可行性]

    Cash Machine Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 32971   Accepted: 11950 De ...

  8. 洛谷P1782 旅行商的背包[多重背包]

    题目描述 小S坚信任何问题都可以在多项式时间内解决,于是他准备亲自去当一回旅行商.在出发之前,他购进了一些物品.这些物品共有n种,第i种体积为Vi,价值为Wi,共有Di件.他的背包体积是C.怎样装才能 ...

  9. HDU 2082 找单词 (多重背包)

    题意:假设有x1个字母A, x2个字母B,..... x26个字母Z,同时假设字母A的价值为1,字母B的价值为2,..... 字母Z的价值为26.那么,对于给定的字母,可以找到多少价值<=50的 ...

随机推荐

  1. ubuntu 系统出错一览

    1.系统升级出错:打开终端输入:sudo apt-get install -f

  2. <mvc:annotation-driven />注解意义

    <mvc:annotation-driven /> 是一种简写形式,完全可以手动配置替代这种简写形式,简写形式可以让初学都快速应用默认配置方案. <mvc:annotation-dr ...

  3. class、interface、struct的区别

    1 struct和class有什么区别 1.1默认的继承访问权限 Struct是public的,class是private的. 你可以写如下的代码: struct A { char a; }; str ...

  4. ASP.NET-【缓存】-使用ASP.NET缓存

    缓存一个List 泛型结构 1.显示 var s = Get("personsl"); foreach (var item in s) { Response.Write(item. ...

  5. hibernate generator class=xxx id详解

    <id>元素中的<generator>用来为该持久化类的实例生成唯一的标识,hibernate提供了很多内置的实现.Increment:由hibernate自动递增生成标识符, ...

  6. intel vt-x处于禁用状态下如何处理

    1.首先看你的bios选项里面有没有该选项,如果没有就更新,更新之后还没有,则不支持 2.找到intel Virtualization Technology 将状态改为Enabled  同时找到int ...

  7. 编写自己的Windows Live Writer插件

    起因 自从小猪使用Windows Live Writer(wlw)来写博客之后就很少打开网站的后台编辑器了,这真是个写博客的好东西啊,但是任何东西都是不完美的.索契冬奥会开幕式都会把五环弄成四环呢!对 ...

  8. 安装Adobe Dreamweaver CS6 免序列号 官方破解版

    Adobe Dreamweaver CS6 免序列号 官方破解版 Adobe Dreamweaver CS6是世界顶级软件厂商Adobe推出的一套可视化的网页开发工具,Dreamweaver CS6最 ...

  9. [Js]基础知识

    一.JavaScript组成 1.ECMAScript 解释器.翻译(提供功能有限,如加减乘除,定义变量.函数等)   几乎没有兼容性问题 2.DOM    有一些兼容性问题 3.BOM(用的少,交互 ...

  10. QQ2013登录报文简单分析(不可用于非法用途)

    [NO.1 2013-05-08 00:31:16 046 SEND 115字节]02 31 03 08 25 27 B5 88 6F 91 D2 03 00 00 00 0101 01 00 00 ...