【二进制优化-多重背包】zznu-oj-2120 : 安详--如何用尽钱币打赏主播获得最大好感度...
2120 : 安详
题目描述
spring最近喜欢上了B站新秀主播,身为顿顿吃黄焖鸡的土豪,当然要过去打赏一番,但是spring还是喜欢精打细算,所以在打赏的时候,想要掏出有限的钱,获得主播的最大好感。
主播的好感值是通过送不同的礼物而提升不同,不同礼物的赠送,可以增加的好感值也是不同的,当然礼物的价格更是不同。
输入
输入第一行为两个整数n,m.分别表示有n种不同礼物(1e2)和总金钱数m(1e6),以下n行每行有三个数字,分别表示该礼物的个数(int)和价格(int)以及好感值(int)。 多实例
输出
求spring拿出的钱可以送出的最大好感值。
样例输入
2 10 4 2 100 2 4 100
样例输出
400
多重背包解决思路:
转换成01背包:二进制优化方法是:将第i种物品分成若干件物品,其中每件物品有一个系数,这件物品的容量和价值均是原来的容量和价值乘以这个系数。使这些系数分别为1,2,4,...,2^(k-1),(以及二进制尾数部分)num[i]-2^k+1,且k是满足num[i]-2^k+1>0的最大整数。例如,如果n[i]为13,就将这种物品分成系数分别为1,2,4,6的四件物品。
1 #define N 10008 2 #define M 1000008 3 4 ll dp[M]; 5 struct node{ 6 ll c,w; //c为cost,w为好感度 7 }p[N]; 8 9 int main(){ 10 11 ll nn,m; 12 while(scanf("%lld%lld",&nn,&m)!=EOF){ 13 int cnt=0;//拆分后的物品数 14 ll t,c,w; 15 16 for(int i=1;i<=nn;i++){ 17 scanf("%lld%lld%lld",&t,&c,&w); //数量,花费,好感度 18 int x=1; 19 while(t-x>0){ 20 t-=x; 21 p[++cnt].c=x*c; 22 p[cnt].w =x*w; 23 x*=2; 24 } 25 p[++cnt].c=t*c; //跑完上面的循环后剩下t 26 p[cnt].w=t*w; 27 } 28 29 memset(dp,0,sizeof(dp)); 30 for(int i=1;i<=cnt;i++){ 31 for(int j=m;j>=p[i].c;j--){ //花费自大到小 32 dp[j]=max(dp[j],dp[j-p[i].c]+p[i].w); 33 } 34 } 35 36 37 printf("%lld\n",dp[m]); 38 } 39 40 return 0; 41 } 42 #define N 10008 43 #define M 1000008 44 45 ll dp[M]; 46 struct node{ 47 ll c,w; //c为cost,w为好感度 48 }p[N]; 49 50 int main(){ 51 52 ll nn,m; 53 while(scanf("%lld%lld",&nn,&m)!=EOF){ 54 int cnt=0;//拆分后的物品数 55 ll t,c,w; 56 57 for(int i=1;i<=nn;i++){ 58 scanf("%lld%lld%lld",&t,&c,&w); //数量,花费,好感度 59 int x=1; 60 while(t-x>0){ 61 t-=x; 62 p[++cnt].c=x*c; 63 p[cnt].w =x*w; 64 x*=2; 65 } 66 p[++cnt].c=t*c; //跑完上面的循环后剩下t 67 p[cnt].w=t*w; 68 } 69 70 memset(dp,0,sizeof(dp)); 71 for(int i=1;i<=cnt;i++){ 72 for(int j=m;j>=p[i].c;j--){ //花费自大到小 73 dp[j]=max(dp[j],dp[j-p[i].c]+p[i].w); 74 } 75 } 76 77 78 printf("%lld\n",dp[m]); 79 } 80 81 return 0; 82 }
View Code(头文件都私奔找对象去啦!)
转载于:https://www.cnblogs.com/zhazhaacmer/p/9373008.html
【二进制优化-多重背包】zznu-oj-2120 : 安详--如何用尽钱币打赏主播获得最大好感度...相关推荐
- 旅行商的背包(二进制优化多重+0/1背包枚举体积))
旅行商的背包(二进制优化多重+0/1背包枚举体积)) 题目描述 小 S 坚信任何问题都可以在多项式时间内解决,于是他准备亲自去当一回旅行商.在出发之前,他购进了一些物品.这些物品共有 n n n 种, ...
- [Bzoj4182]Shopping(点分治)(树上背包)(单调队列优化多重背包)
4182: Shopping Time Limit: 30 Sec Memory Limit: 128 MB Submit: 374 Solved: 130 [Submit][Status][Di ...
- 单调队列优化多重背包
就是按照 % 体积的余数来分组,每组单调队列优化. 直接上模板好了. 1 #include <bits/stdc++.h> 2 3 typedef long long LL; 4 cons ...
- 背包问题的二进制优化
01背包问题 图解+详细解析 (转载) 01背包问题 图解+详细解析 (转载)_迪迦 • 奥特曼-CSDN博客 01背包问题 图解+详细解析 (转载)_可控的事情要谨慎,不可控的事情要乐观.-CSDN ...
- 为了OFFER,菜鸟的我必须搞懂动态规划系列三个背包问题之多重背包(二进制优化方法)
@Author:Runsen @Date:2020/9/17 多重背包有三层循环,如果数据非常的大,那么程序就会变得非常悲伤.在多重背包的问题,其实更多的是考查多重背包的二进制优化方法.学习二进制优化 ...
- HDU 5445 Food Problem 多重背包+二进制优化
据说也可以用单调队列优化多重背包,但是我不会,所以还是选择了二进制优化... 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5445 题意:先给n,m, ...
- 背包问题基础模型深度总结-文长慎入(01背包,完全背包,多重背包)
先等一下,字多预警,密集恐惧症慎入,喂,你,就是你,小板凳搬好了吗,站久了可是会腿酸的 无节操地王婆卖瓜一下, 本文 深度好文 目录 先扯两句 0-1背包 其它类似的状态定义 1 2 小结 3 记忆 ...
- 01背包, 完全背包,多重背包
优秀博文01背包https://www.cnblogs.com/Christal-R/p/Dynamic_programming.html 背包问题泛指以下这一种问题: 给定一组有固定价值和固定重量的 ...
- 贪吃的大嘴 多重背包 dp
7-4 贪吃的大嘴 (15分) 有一只特别贪吃的大嘴,她很喜欢吃一种小蛋糕,而每一个小蛋糕有一个美味度,而大嘴是很傲娇的,一定要吃美味度和刚好为m的小蛋糕,而且大嘴还特别懒,她希望通过吃数量最少的小蛋 ...
最新文章
- 红黑树+java+删除_红黑树深入剖析及Java实现
- apache-tomcat-6.0.39的配置
- Codeforces Round #394 (Div. 2) A. Dasha and Stairs 水题
- MYSQL出错代码和出错信息对照表
- mybatis学习(34):动态sql-choose
- linux5.5 分辨率,Linux Kernel 5.5 正式发布
- android animation学习
- 由一个bug引发的SQLite缓存一致性探索
- linux驱动怎么判断定时器正在运行,Linux设备驱动编程之定时器
- Win10 技巧:让任务栏时间显示 “秒”
- Java业内主流框架你知道吗?SSH和SSM有什么区别?
- 电影下载合并教程 (转)
- 运筹说 第49期 | 走近数理经济学之父一帕累托
- STM32F103C8T6 I/O口驱动4位共阳数码管
- AHRS姿态解算说明(加速度+陀螺仪+磁力计原理及原始数据分析)
- java如何将图片转为pdf
- Mysql数据库MMM实现高可用架构
- Kid的某些跳刺套路
- 地球,再一次完成了绝妙的自转 ......
- (转)【翻译】火影忍者鸣人 疾风传 终级风暴2 制作介绍
热门文章
- 重阳节教育课件PPT模板
- Windows FAT32转换NTFS
- 基于sqlite数据库
- 基于通道注意力机制的图像压缩改进(zqb第三章)
- 封装和继承作业(java)(二)
- 刘国军:Imagination支持中国创“芯” 推动汽车百年大变革
- Android(selinux权限)(capabillty权限)(节点权限)等权限处理
- [年终总结]2019年迈向2020年流水记
- Curl安装测试http3——openssl+nghttp3+ngtcp2+curl
- 计算机组成原理复习山东大学,山东大学计算机组成原理三套题汇总要点.docx