HDU链接

文章目录

  • 题目描述:
  • 题意:
  • 题解
  • (代码)

题目描述:


输入描述:

输出描述:

For each test case output the answer on a single line.

输入

3 10
1 2 4 2 1 1
2 5
1 4 2 1
0 0

输出

8
4

题意:

有n种硬币,面额分别是Ai,每种硬币数量分别是Ci,问这些硬币能组成1~m中多少个数?
样例分析:
3 10
1 2 4 2 1 1
有2个一元,1个两元,1个四元,可以组成1,2,3,4,5,6,7,8,(9和10无法组成)能组成的一共八个

题解

如果还没学习背包问题的知识,看这里
混合背包问题
可以用二进制的方法来优化
背包问题中常见的三个元素:体积(所占容量),价值,数量
在本题中,硬币的价值即是体积也是价值A[i],数量为硬币的数量C[i]
容量上限是m
当ca>m时,也就是一种货币的金额就超过m时,我们可以当做是完全背包,即将这种货币看做无数个,因为货币的数量乘以金额已经超过上限,所以再多也没有影响。这一部分用完全背包的做法
当c
a<m时,我们就当做多重背包来做,将多重背包进行二进制优化,用01背包的解法来做
具体看代码:

(代码)

含详细讲解

#include<bits/stdc++.h>
using namespace std;
const int maxn=1e5+5;
int dp[maxn];
int a[120],c[120];
int n,m;
void zeroone(int cost,int val)
{for(int i=m;i>=cost;i--){dp[i]=max(dp[i],dp[i-cost]+val);}
}
void wanquanbeibao(int cost,int val)
{for(int i=cost;i<=m;i++)dp[i]=max(dp[i],dp[i-cost]+val);
}
void cal(int cost,int val,int num)
{if(cost*num>=m)wanquanbeibao(cost,val);//完全背包不必考虑数量else {for(int i=1;i<=num;i<<=1){zeroone(i*cost,i*val);//乘以对应的系数 num-=i; }zeroone(num*cost,num*val);//剩余部分处理 }
}
int main()
{while(cin>>n>>m&&(n+m)){memset(dp,0,sizeof(dp));for(int i=1;i<=n;i++)cin>>a[i];for(int i=1;i<=n;i++)cin>>c[i];for(int i=1;i<=n;i++){cal(a[i],a[i],c[i]);//花费,价值,数量 }int sum=0;for(int i=1;i<=m;i++){if(dp[i]==i)sum++;}cout<<sum<<endl;}return 0;
}

hdu-2844 Coins (混合背包+二进制优化)相关推荐

  1. HDU 2844 Coins 多重背包

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=2844 Coins Time Limit: 2000/1000 MS (Java/Others)Mem ...

  2. Codevs 3269 混合背包(二进制优化)

    3269 混合背包 时间限制: 1 s 空间限制: 256000 KB 题目等级 : 钻石 Diamond 传送门 题目描述 Description 背包体积为V ,给出N个物品,每个物品占用体积为V ...

  3. HDU - 2844 Coins(多重背包+完全背包)

    题意 给n个币的价值和其数量,问能组合成\(1-m\)中多少个不同的值. 分析 对\(c[i]*a[i]>=m\)的币,相当于完全背包:\(c[i]*a[i]<m\)的币则是多重背包,考虑 ...

  4. HDU 2844 Coins (多重背包)

    题目链接 题意:Tony想要买一个东西,他只有n种硬币,每种硬币的面值为a[i],每种硬币的数量为c[i],要买的物品价值不超过m,输出1-m中有多少种价格Tony可以用硬币组合出来. 题解:多重背包 ...

  5. 旅行商的背包(二进制优化多重+0/1背包枚举体积))

    旅行商的背包(二进制优化多重+0/1背包枚举体积)) 题目描述 小 S 坚信任何问题都可以在多项式时间内解决,于是他准备亲自去当一回旅行商.在出发之前,他购进了一些物品.这些物品共有 n n n 种, ...

  6. [多重背包+二进制优化]HDU1059 Dividing

    题目链接 题目大意: 两个人要把一堆宝珠,在不能切割的情况下按照价值平分,他们把宝珠分成6种价值,每种价值的宝珠n个. n<=200000 思考: 首先如果加和下来的价值是一个偶数 那么还分毛啊 ...

  7. HDU 5445 Food Problem 多重背包+二进制优化

    据说也可以用单调队列优化多重背包,但是我不会,所以还是选择了二进制优化... 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5445 题意:先给n,m, ...

  8. P1833 樱花——混合背包 二进制优化成01背包

    P1833樱花 题目大意:有n颗樱花树,你的总时间为T,现在n课树,每次观看要花费w时间,能获取v点价值,最多能参观s次,如果s等于0,则可以观看无限次,问你在T时间内 获得的最大价值是多少. 思路: ...

  9. POJ 1014 Dividing【多重背包+二进制优化】

    大意: 价值1, 2, 3, --, 6的物品分别a1, a2, --, a5, a6件 问能否把这些物品分成两份,使其具有相同的价值(所有物品必须全部用上) 分析: 给个物品有多件,即多重背包 只要 ...

最新文章

  1. 点在多边形内的判断(射线法)
  2. python绘图内容怎么保存_将绘图保存到图像文件,而不是使用Matplotlib显示 - python...
  3. USACO_2_3_Controlling Companies
  4. html5 XMLHttpRequest 图片异步上传
  5. IP地址的正则表达式
  6. 使用docker commit将修改后的容器保存为镜像及其使用注意事项
  7. 【Python】学习笔记总结3(Python文件操作)
  8. 飞桨企业版重磅发布智能边缘控制台 5分钟零代码自动化模型部署
  9. Java8中list转map方法总结
  10. C++ IO 流简介
  11. 谷歌浏览器插件离线安装
  12. 小公司代理记账报税常见问题
  13. Excel表格导入CAD后,表格内数字后的小数点怎么消除呢?
  14. 分类算法之K-Nearest Neighbors
  15. 天翼云服务器硬盘怎么挂载,用s3fs挂载天翼OOS到服务器
  16. 路由器上DHCP配置 及单臂路由
  17. Android笔记:将布局转换成图片
  18. git命令行修改用户名密码
  19. JAVA 从原理到实现,制作license文件,可用于模块授权,程序授权等
  20. Vue3+Vite项目使用mockjs模拟数据

热门文章

  1. 图像还可以这样玩!如何用OpenCV处理图像?
  2. 如何把朋友升级成情侣?| 今日最佳
  3. 每日一笑 | 终于知道为什么胖了之后气质会垮了
  4. 一起读懂传说中的经典:受限玻尔兹曼机
  5. Java并发编程实战_真香!阿里P8耗时半年著作660页Java高并发与网络编程实战总结...
  6. 12333新农合网上查询_新农合医保查询缴费平台|新农村医疗保险网上缴费平台
  7. 摇滚java游戏_java 集合类
  8. ubuntu php7.4,在Ubuntu 18.04/19.04/16.04版本上安装PHP 7.4的简单方法
  9. makefile obj文件路径_Makefile一问:如何修改.o输出文件的输出路径 Linux/Unix社区 / 程序开......
  10. python中getrandbits函数用法_python random - 刘江的python教程