给出N种钱币和M

给出N种钱币的面值和个数

NPC拿着这N些钱币去买价值M的物品,能够多付。然后被找零,找零的钱也为这些面值。但没有数量限制

问最少经手的钱币数量

对于NPC做一个付款多重背包

然后对于找零做一个全然背包

ans=Min(dp1[i]+dp2[i-m],ans);

  1. #include "stdio.h"
  2. #include "string.h"
  3.  
  4. int n,m;
  5. int dp1[20010],dp2[20010],c[20010],v[20010];
  6. void onezero_pack(int v,int k)
  7. {
  8. int i;
  9. for (i=20000;i>=v;i--)
  10. if (dp1[i-v]!=-1 && (dp1[i-v]+k<dp1[i] || dp1[i]==-1) )
  11. dp1[i]=dp1[i-v]+k;
  12. }
  13.  
  14. void complete_pack(int v)
  15. {
  16. int i;
  17. for (i=v;i<=20000;i++)
  18. if (dp1[i-v]!=-1 && (dp1[i-v]+1<dp1[i] || dp1[i]==-1) )
  19. dp1[i]=dp1[i-v]+1;
  20. }
  21.  
  22. void multiple_pack(int v,int c)
  23. {
  24. int k;
  25. if (v*c>=20000)
  26. complete_pack(v);
  27. else
  28. {
  29. k=1;
  30. while (k<c)
  31. {
  32. onezero_pack(k*v,k);
  33. c-=k;
  34. k*=2;
  35. }
  36. if (c>0) onezero_pack(c*v,k);
  37. }
  38. }
  39.  
  40. int Min(int a,int b)
  41. {
  42. if (a<b) return a;
  43. else return b;
  44. }
  45. int main()
  46. {
  47. int Case,i,j,ans;
  48. Case=0;
  49. while (scanf("%d%d",&n,&m)!=EOF)
  50. {
  51. if (n+m==0) break;
  52. for (i=1;i<=n;i++)
  53. scanf("%d",&v[i]);
  54. for (i=1;i<=n;i++)
  55. scanf("%d",&c[i]);
  56.  
  57. memset(dp1,-1,sizeof(dp1));
  58. dp1[0]=0;
  59.  
  60. for (i=1;i<=n;i++)
  61. multiple_pack(v[i],c[i]);
  62.  
  63. memset(dp2,-1,sizeof(dp2));
  64. dp2[0]=0;
  65. for (i=1;i<=n;i++)
  66. for (j=0;j<=20000-v[i];j++)
  67. {
  68. if (dp2[j]!=-1 && (dp2[j]+1<dp2[j+v[i]] || dp2[j+v[i]]==-1) )
  69. dp2[j+v[i]]=dp2[j]+1;
  70. }
  71.  
  72. ans=0x3f3f3f3f;
  73. for (i=m;i<=20000;i++)
  74. if (dp1[i]!=-1 && dp2[i-m]!=-1)
  75. ans=Min(dp1[i]+dp2[i-m],ans);
  76.  
  77. printf("Case %d: ",++Case);
  78. if (ans==0x3f3f3f3f)
  79. printf("-1\n");
  80. else
  81. printf("%d\n",ans);
  82. }
  83. return 0;
  84. }

HDU 3591 多重背包的更多相关文章

  1. hdu 5445 多重背包

    Food Problem Time Limit: 3000/2000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others)To ...

  2. HDU 3591 (完全背包+二进制优化的多重背包)

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=3591 The trouble of Xiaoqian Time Limit: 2000/1000 M ...

  3. hdu 2191 多重背包 悼念512汶川大地震遇难同胞——珍惜现在,感恩生活

    http://acm.hdu.edu.cn/showproblem.php?pid=2191 New~ 欢迎“热爱编程”的高考少年——报考杭州电子科技大学计算机学院关于2015年杭电ACM暑期集训队的 ...

  4. Big Event in HDU(HDU 1171 多重背包)

    Big Event in HDU Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others ...

  5. HDU 1171 Big Event in HDU (多重背包)

    Big Event in HDU Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others ...

  6. HDU1171--Big Event in HDU(多重背包)

    Big Event in HDU   Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) ...

  7. Big Event in HDU(多重背包套用模板)

    http://acm.hdu.edu.cn/showproblem.php?pid=1171 Big Event in HDU Time Limit: 10000/5000 MS (Java/Othe ...

  8. hdu 1059 (多重背包) Dividing

    这里;http://acm.hdu.edu.cn/showproblem.php?pid=1059 题意是有价值分别为1,2,3,4,5,6的商品各若干个,给出每种商品的数量,问是否能够分成价值相等的 ...

  9. 题解报告:hdu 1171 Big Event in HDU(多重背包)

    Problem Description Nowadays, we all know that Computer College is the biggest department in HDU. Bu ...

随机推荐

  1. .net中数据缓存使用

    今天 遇到一个问题 访问一个接口数据 基本上是固定的,于是想把数据 缓存下来...于是版本1 诞生了 private static ConcurrentDictionary<int, List& ...

  2. Android布局中match_parent和fill_parent的差别

    今天在做项目的一个新功能的时候,从网上查找资源,发现android2.2中出现的MATCH_PARENT感到不明确.过去仅仅有FILL_PARENT和WRAP_CONTENT那么match_paren ...

  3. vc2010, fatal error LNK1123: failure during conversion to COFF: file invalid or corrupt解决办法

    是因为安其它软件的时候更新了.net framework,导致vc2010出了问题. 解决办法是在系统里搜索cvtres.exe,会搜到很多,把其中 Microsoft Visual Studio 1 ...

  4. Subversion和TortoiseSVN安装与配置(转)

    Subversion为版本控制软件的服务器端. TortoiseSVN为版本控制软件的客户端. 1.下载Subversion与TortoiseSVN. Subversion的地址:http://sub ...

  5. Spring mvc 注解@ResponseBody 返回内容编码问题

    @ResponseBody 在@Controller 类方法中能够让字符串直接返回内容. 其返回处理的类是org.springframework.http.converter.StringHttpMe ...

  6. 阻塞赋值与非阻塞赋值(verilog篇)

    阻塞赋值与非阻塞赋值(verilog篇) 2017-09-30 竹海 相约电子ee 相信刚刚接触verilog的读者,多少对阻塞赋值和非阻塞赋值仍有一些困惑.笔者在这篇文章,带领大家深入的理解这两者的 ...

  7. C++语言基础(8)-引用

    (重要)使用引用的一些注意点: 1.引用不能绑定临时数据,也不能绑定任何无法获取内存地址的常量,表达式,或值,常引用除外. 第一种写法:(错误) int func_int(){ ; return n; ...

  8. C# Type.GetConstructor() 根据构造函数参数获取实例对象(一)

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...

  9. grub手动引导win7

    grub>rootnoverify (hd0,0)--->win7系统安装盘号 grub > chainloader +1 grub > makeactive     ---& ...

  10. stylelint — css书写规范

    sass lint guidance 一.安装:npm intsall -g stylelint 二.配置:http://stylelint.io/user-guide/rules/ (以下规则文件配 ...