1. //Accepted 624 KB 16 ms
  2. //dp 背包 多重背包
  3. #include <cstdio>
  4. #include <cstring>
  5. #include <iostream>
  6. using namespace std;
  7. ;
  8. int f[imax_n];
  9. ];
  10. int v;
  11. ;
  12. int max(int a,int b)
  13. {
  14. return a>b?a:b;
  15. }
  16. void zeroOnePack(int cost,int weight)
  17. {
  18. for (int j=v;j>=cost;j--)
  19. f[j]=max(f[j],f[j-cost]+weight);
  20. }
  21. void completePack(int cost,int weight)
  22. {
  23. for (int j=cost;j<=v;j++)
  24. f[j]=max(f[j],f[j-cost]+weight);
  25. }
  26. void multiplePack(int cost,int weight,int amount)
  27. {
  28. if (cost*amount>=v)
  29. {
  30. completePack(cost,weight);
  31. return ;
  32. }
  33. ;
  34. while (k<amount)
  35. {
  36. zeroOnePack(k*cost,k*weight);
  37. amount-=k;
  38. k<<=;
  39. }
  40. zeroOnePack(amount*cost,amount*weight);
  41. }
  42. void Dp()
  43. {
  44. memset(f,,sizeof(f));
  45. ;i<=n;i++)
  46. {
  47. multiplePack(i,i,amount[i]);
  48. }
  49. ;
  50. ;i<=v;i++)
  51. ans=max(ans,f[i]);
  52. if (ans==v)
  53. {
  54. printf("Can be divided.\n");
  55. }
  56. else
  57. {
  58. printf("Can't be divided.\n");
  59. }
  60. printf("\n");
  61. }
  62. int main()
  63. {
  64. ;
  65. ],&amount[],&amount[],&amount[],&amount[],&amount[]),amount[]+amount[]+amount[]+amount[]+amount[]+amount[])
  66. {
  67. v=;
  68. ;i<=n;i++)
  69. {
  70. v+=amount[i]*i;
  71. }
  72. printf("Collection #%d:\n",++t);
  73. ==)
  74. {
  75. printf("Can't be divided.\n\n");
  76. }
  77. else
  78. {
  79. v=v/;
  80. Dp();
  81. }
  82. }
  83. ;
  84. }

poj1014 dp 多重背包的更多相关文章

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

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

  2. HDOJ(HDU).1059 Dividing(DP 多重背包+二进制优化)

    HDOJ(HDU).1059 Dividing(DP 多重背包+二进制优化) 题意分析 给出一系列的石头的数量,然后问石头能否被平分成为价值相等的2份.首先可以确定的是如果石头的价值总和为奇数的话,那 ...

  3. HDOJ(HDU).2191. 悼念512汶川大地震遇难同胞――珍惜现在,感恩生活 (DP 多重背包+二进制优化)

    HDOJ(HDU).2191. 悼念512汶川大地震遇难同胞――珍惜现在,感恩生活 (DP 多重背包+二进制优化) 题意分析 首先C表示测试数据的组数,然后给出经费的金额和大米的种类.接着是每袋大米的 ...

  4. Buns(dp+多重背包)

    C. Buns time limit per test 2 seconds memory limit per test 256 megabytes input standard input outpu ...

  5. CodeForces922E DP//多重背包的二进制优化

    https://cn.vjudge.net/problem/1365218/origin 题意 一条直线上有n棵树 每棵树上有ci只鸟 在一棵树底下召唤一只鸟的魔法代价是costi 每召唤一只鸟,魔法 ...

  6. BZOJ.3425.[POI2013]Polarization(DP 多重背包 二进制优化)

    BZOJ 洛谷 最小可到达点对数自然是把一条路径上的边不断反向,也就是黑白染色后都由黑点指向白点.这样答案就是\(n-1\). 最大可到达点对数,容易想到找一个点\(a\),然后将其子树分为两部分\( ...

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

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

  8. POJ1014(多重背包)

    Dividing Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 65044   Accepted: 16884 Descri ...

  9. ACM学习历程—HDU 1059 Dividing(dp && 多重背包)

    Description Marsha and Bill own a collection of marbles. They want to split the collection among the ...

随机推荐

  1. 关于ipxe启动的几个疑问

    关于ipxe启动的几个疑问 http://bbs.wuyou.net/forum.php?mod=viewthread&tid=373026&page=1&extra=#pid ...

  2. x^y=(x&~y)|(~x&y)证明

    我见过最棒的证明是文氏图:(首先要知道二元布尔代数是集合的特殊情况,所以把X和Y当作两个集合,结论成立,那么在二元布尔代数里面也成立.)左边的圈是X,右边的圈是Y.如果是OR 也就是取或,中间的白色的 ...

  3. 八大排序算法的 Python 实现

    转载: 八大排序算法的 Python 实现 本文用Python实现了插入排序.希尔排序.冒泡排序.快速排序.直接选择排序.堆排序.归并排序.基数排序. 1.插入排序 描述 插入排序的基本操作就是将一个 ...

  4. python 练习 15

    #!/usr/bin/python # -*- coding: UTF-8 -*- for i in range(1,10): for j in range(1,10): result = i * j ...

  5. Java开发Maven环境配置和介绍

    最近很火热的12306的订票软件go-home,我也下载了一份下来了,使用了一下,也从svn中把代码down下来了,但是在eclipse中竟然出错了,依赖的jar包都没有找到,后来才知道人家是用mav ...

  6. inout

    在函数声明时就用inout代替var  这样以后可以在函数内部修改外面的值 类似于C语言的传入指针 func change (inout num:Int) { num = 10 } var a = 2 ...

  7. Run “mvn clean install” in Eclipse

    1.在Maven项目或者pom.xml上右键-->Run As -->"Maven Build..."或者"Run Configuration-->Ma ...

  8. (转载整理)SAP ERP常用T-CODE

    其实最讨厌做ERP的项目了.不过,身不由己的嘛! 网上资料加一些整理. 与客户相关  VD01 建立客户 Create customerVD02 更改客户 Change customerVD03 显示 ...

  9. 串口调试,提示the given port name does not start with COM/com异常解决办法,,发现是打印机在搞怪

    串口测试时,用到串口,把打印机的拔下来,换上测试的,程序一打开就提示错误:the given port name does not start with COM/com or does not res ...

  10. c#中的常用ToString()方法总结

    c#中的常用ToString()方法总结 对于int,double等的tostring: C 货币 2.5.ToString("C") ¥2.50 D 十进制数 25.ToStri ...