2120 : 安详

题目描述

spring最近喜欢上了B站新秀主播,身为顿顿吃黄焖鸡的土豪,当然要过去打赏一番,但是spring还是喜欢精打细算,所以在打赏的时候,想要掏出有限的钱,获得主播的最大好感。

主播的好感值是通过送不同的礼物而提升不同,不同礼物的赠送,可以增加的好感值也是不同的,当然礼物的价格更是不同。

输入

输入第一行为两个整数n,m.分别表示有n种不同礼物(1e2)和总金钱数m(1e6),以下n行每行有三个数字,分别表示该礼物的个数(int)和价格(int)以及好感值(int)。 多实例

输出

求spring拿出的钱可以送出的最大好感值。

样例输入

复制
2 10
4 2 100
2 4 100

样例输出

复制
400

多重背包解决思路:

 题目:有N种物品和一个容量为V的背包。第i种物品最多有num[i]件可用,每件容量是c[i],价值是w[i]。

转换成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 : 安详--如何用尽钱币打赏主播获得最大好感度...相关推荐

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

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

  2. [Bzoj4182]Shopping(点分治)(树上背包)(单调队列优化多重背包)

    4182: Shopping Time Limit: 30 Sec  Memory Limit: 128 MB Submit: 374  Solved: 130 [Submit][Status][Di ...

  3. 单调队列优化多重背包

    就是按照 % 体积的余数来分组,每组单调队列优化. 直接上模板好了. 1 #include <bits/stdc++.h> 2 3 typedef long long LL; 4 cons ...

  4. 背包问题的二进制优化

    01背包问题 图解+详细解析 (转载) 01背包问题 图解+详细解析 (转载)_迪迦 • 奥特曼-CSDN博客 01背包问题 图解+详细解析 (转载)_可控的事情要谨慎,不可控的事情要乐观.-CSDN ...

  5. 为了OFFER,菜鸟的我必须搞懂动态规划系列三个背包问题之多重背包(二进制优化方法)

    @Author:Runsen @Date:2020/9/17 多重背包有三层循环,如果数据非常的大,那么程序就会变得非常悲伤.在多重背包的问题,其实更多的是考查多重背包的二进制优化方法.学习二进制优化 ...

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

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

  7. 背包问题基础模型深度总结-文长慎入(01背包,完全背包,多重背包)

    先等一下,字多预警,密集恐惧症慎入,喂,你,就是你,小板凳搬好了吗,站久了可是会腿酸的 无节操地王婆卖瓜一下, 本文 深度好文 目录 先扯两句 0-1背包 其它类似的状态定义 1 2 小结 3  记忆 ...

  8. 01背包, 完全背包,多重背包

    优秀博文01背包https://www.cnblogs.com/Christal-R/p/Dynamic_programming.html 背包问题泛指以下这一种问题: 给定一组有固定价值和固定重量的 ...

  9. 贪吃的大嘴 多重背包 dp

    7-4 贪吃的大嘴 (15分) 有一只特别贪吃的大嘴,她很喜欢吃一种小蛋糕,而每一个小蛋糕有一个美味度,而大嘴是很傲娇的,一定要吃美味度和刚好为m的小蛋糕,而且大嘴还特别懒,她希望通过吃数量最少的小蛋 ...

最新文章

  1. 红黑树+java+删除_红黑树深入剖析及Java实现
  2. apache-tomcat-6.0.39的配置
  3. Codeforces Round #394 (Div. 2) A. Dasha and Stairs 水题
  4. MYSQL出错代码和出错信息对照表
  5. mybatis学习(34):动态sql-choose
  6. linux5.5 分辨率,Linux Kernel 5.5 正式发布
  7. android animation学习
  8. 由一个bug引发的SQLite缓存一致性探索
  9. linux驱动怎么判断定时器正在运行,Linux设备驱动编程之定时器
  10. Win10 技巧:让任务栏时间显示 “秒”
  11. Java业内主流框架你知道吗?SSH和SSM有什么区别?
  12. 电影下载合并教程 (转)
  13. 运筹说 第49期 | 走近数理经济学之父一帕累托
  14. STM32F103C8T6 I/O口驱动4位共阳数码管
  15. AHRS姿态解算说明(加速度+陀螺仪+磁力计原理及原始数据分析)
  16. java如何将图片转为pdf
  17. Mysql数据库MMM实现高可用架构
  18. Kid的某些跳刺套路
  19. 地球,再一次完成了绝妙的自转 ......
  20. (转)【翻译】火影忍者鸣人 疾风传 终级风暴2 制作介绍

热门文章

  1. 重阳节教育课件PPT模板
  2. Windows FAT32转换NTFS
  3. 基于sqlite数据库
  4. 基于通道注意力机制的图像压缩改进(zqb第三章)
  5. 封装和继承作业(java)(二)
  6. 刘国军:Imagination支持中国创“芯” 推动汽车百年大变革
  7. Android(selinux权限)(capabillty权限)(节点权限)等权限处理
  8. [年终总结]2019年迈向2020年流水记
  9. Curl安装测试http3——openssl+nghttp3+ngtcp2+curl
  10. 计算机组成原理复习山东大学,山东大学计算机组成原理三套题汇总要点.docx