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的四件物品。

  

 #define N 10008
#define M 1000008 ll dp[M];
struct node{
ll c,w; //c为cost,w为好感度
}p[N]; int main(){ ll nn,m;
while(scanf("%lld%lld",&nn,&m)!=EOF){
int cnt=;//拆分后的物品数
ll t,c,w; for(int i=;i<=nn;i++){
scanf("%lld%lld%lld",&t,&c,&w); //数量,花费,好感度
int x=;
while(t-x>){
t-=x;
p[++cnt].c=x*c;
p[cnt].w =x*w;
x*=;
}
p[++cnt].c=t*c; //跑完上面的循环后剩下t
p[cnt].w=t*w;
} memset(dp,,sizeof(dp));
for(int i=;i<=cnt;i++){
for(int j=m;j>=p[i].c;j--){ //花费自大到小
dp[j]=max(dp[j],dp[j-p[i].c]+p[i].w);
}
} printf("%lld\n",dp[m]);
} return ;
}
#define N 10008
#define M 1000008 ll dp[M];
struct node{
ll c,w; //c为cost,w为好感度
}p[N]; int main(){ ll nn,m;
while(scanf("%lld%lld",&nn,&m)!=EOF){
int cnt=;//拆分后的物品数
ll t,c,w; for(int i=;i<=nn;i++){
scanf("%lld%lld%lld",&t,&c,&w); //数量,花费,好感度
int x=;
while(t-x>){
t-=x;
p[++cnt].c=x*c;
p[cnt].w =x*w;
x*=;
}
p[++cnt].c=t*c; //跑完上面的循环后剩下t
p[cnt].w=t*w;
} memset(dp,,sizeof(dp));
for(int i=;i<=cnt;i++){
for(int j=m;j>=p[i].c;j--){ //花费自大到小
dp[j]=max(dp[j],dp[j-p[i].c]+p[i].w);
}
} printf("%lld\n",dp[m]);
} return ;
}

(头文件都私奔找对象去啦!)

【二进制优化-多重背包】zznu-oj-2120 : 安详--如何用尽钱币打赏主播获得最大好感度的更多相关文章

  1. poj1014二进制优化多重背包

    Dividing Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 53029   Accepted: 13506 Descri ...

  2. 51nod 1086 背包问题 V2(二进制优化多重背包)

    题目链接:https://www.51nod.com/onlineJudge/questionCode.html#!problemId=1086 题解:怎么用二进制优化多重背包,举一个例子就明白了. ...

  3. POJ - 1276 二进制优化多重背包为01背包

    题意:直接说数据,735是目标值,然后3是后面有三种钱币,四张125的,六张五块的和三张350的. 思路:能够轻易的看出这是一个多重背包问题,735是背包的容量,那些钱币是物品,而且有一定的数量,是多 ...

  4. [Bzoj 1192][HNOI2006]鬼谷子的钱袋(二进制优化多重背包)

    (人生第一篇bzoj题解有点激动 首先介绍一下题目: 看它题目那么长,其实意思就是给定一个数a,求将其拆分成n个数,通过这n个数可以表示出1~a中所有数的方案中,求最小的n. 您看懂了嘛?不懂咱来举个 ...

  5. BZOJ 1531 二进制优化多重背包

    思路: 讲道理我应该写单调队列优化多重背包的 但是我不会啊 但是我现在! 还不会啊 我就写了个二进制优化的.. 过了 //By SiriusRen #include <cstdio> #i ...

  6. poj 1742 Coins(二进制优化多重背包)

    传送门 解题思路 多重背包,二进制优化.就是把每个物品拆分成一堆连续的\(2\)的幂加起来的形式,然后把最后剩下的也当成一个元素.直接类似\(0/1\)背包的跑就行了,时间复杂度\(O(nmlogc) ...

  7. Codeforces 755F PolandBall and Gifts bitset + 二进制优化多重背包

    PolandBall and Gifts 转换成置换群后, 对于最大值我们很好处理. 对于最小值, 只跟若干个圈能否刚好组能 k 有关. 最直观的想法就是bitset优化背包, 直接搞肯定T掉. 我们 ...

  8. [tyvj-1194]划分大理石 二进制优化多重背包

    突然发现这个自己还不会... 其实也不难,就和快速幂感觉很像,把物品数量二进制拆分一下,01背包即可 我是咸鱼 #include <cstdio> #include <cstring ...

  9. [POJ1014]Dividing(二进制优化多重背包)

    #include <cstdio> #include <algorithm> #include <cstring> using namespace std; int ...

随机推荐

  1. Egret入门学习日记 --- 第十一篇(书中 4.1~4.6节 内容)

    第十一篇(书中 4.1~4.6节 内容) 好了,到了这篇开始,前三章都记录完了. 接下来就是到第四章了. 4.1节 的内容总结一下重点: 1.resource目录下default.res.json文件 ...

  2. Kali之Metasploit生成apk后门控制安卓

    扫盲教程,大佬勿喷. 实验中请更改为你环境的IP. 生成apk后门 Kali Linux(Hack):192.168.169.76 Android(靶机):192.168.169.137 启动kali ...

  3. Java面试 - static 修饰的变量和方法有哪些特点?

    1.static修饰的变量和方法,在类加载时即被初始化,可直接通过类名.变量名和类型.方法名进行调用. 2.static修饰的变量,在类加载时会被分配到数据区的方法区.类的实例可共享方法区中的变量.如 ...

  4. oracle管道函数的用法(一行拆为多行)

    oracle管道函数是一类特殊的函数,oracle管道函数返回值类型必须为集合 如果需要在客户端实时的输出函数执行过程中的一些信息,在oracle9i以后可以使用管道函数(pipeline funct ...

  5. AlgorithmMap Dev Log

    Log 2019.08.29 ------------------------------------------------------------------------------------- ...

  6. PHP和Memcached - 在PHP中的应用 - Memcached类介绍 - 封装自己的Memcached类库

    1.Memcached类的介绍 详见PHP官方文档:点击访问. 2.封装自己的Memcached类库 <?php namespace Cache\Lib; class MemCache { /* ...

  7. windons下一些软件的地址

    idea http://download.jetbrains.8686c.com/idea/ideaIC-2018.3.1.exe

  8. javascript 写一个ajax 自动拦截,并下载数据

    <!DOCTYPE html> <html lang="zh"> <head> <meta charset="UTF-8&quo ...

  9. IdentityServer4密码模式接入现有用户数据表

    具体接入identityserver请看文档,这里只简单列举部分步骤 1.创建一个web项目,引入Identityserver4的nuget包 2.新建一个类,实现IResourceOwnerPass ...

  10. ASP.NET全局编码和语言

    // /*--------------- // //  使用地方:ASP.NET 项目 // //   // // 文件名: // // 文件功能描述:可控制整个项目的一个统一编码格式和语言文字显示 ...