luogu1417 烹调方案
题目大意
一共有$n$件食材,每件食材有三个属性,$a_i$,$b_i$和$c_i$,如果在$t$时刻完成第$i$样食材则得到$a_i-t*b_i$的美味指数,用第$i$件食材做饭要花去$c_i$的时间。请设计烹调方案使得美味指数最大。
题解
这是一道典型的通过邻项交换进行贪心,随后得到动规方向的例子。如果没有$b_i$,这就是一个简单的01背包;有了$b_i$,我们可以尝试给物品排个序。
对于相邻的两个元素$i,j$,它们在$t$时刻开始做,它们不交换时,美味度和为$$a_i -b_i t+a_j -b_j(t+c_i)\tag 1$$,交换后,美味度和为$$a_j-b_j t+a_i -b_i(t+c_j)\tag 2$$。若要使正常的顺序使它们的和最大,则$$(1)-(2)=b_i c_j -b_j c_i>0$$。所以按照此排序后再01背包即可。
- #include <cstdio>
- #include <cstring>
- #include <algorithm>
- using namespace std;
- const int MAX_OBJ = 60, MAX_V = 100010, MINF = 0xcfcfcfcf;
- struct Node
- {
- long long A, B, C;
- bool operator < (const Node& a) const
- {
- return a.B * C < B * a.C;
- }
- }_objs[MAX_OBJ];
- int TotObj, TotV;
- long long DP()
- {
- static long long F[MAX_V];
- memset(F, 0xcf, sizeof(F));
- F[0] = 0;
- for (int i = 1; i <= TotObj; i++)
- for (int j = TotV; j >= _objs[i].C; j--)
- F[j] = max(F[j], F[j - _objs[i].C] + _objs[i].A - _objs[i].B * j);
- long long ans = 0;
- for (int i = 1; i <= TotV; i++)
- ans = max(ans, F[i]);
- return ans;
- }
- int main()
- {
- scanf("%d%d", &TotV, &TotObj);
- for (int i = 1; i <= TotObj; i++)
- scanf("%lld", &_objs[i].A);
- for (int i = 1; i <= TotObj; i++)
- scanf("%lld", &_objs[i].B);
- for (int i = 1; i <= TotObj; i++)
- scanf("%lld", &_objs[i].C);
- sort(_objs + 1, _objs + TotObj + 1);
- printf("%lld\n", DP());
- return 0;
- }
luogu1417 烹调方案的更多相关文章
- 洛谷P1417 烹调方案
题目背景 由于你的帮助,火星只遭受了最小的损失.但gw懒得重建家园了,就造了一艘飞船飞向遥远的earth星.不过飞船飞到一半,gw发现了一个很严重的问题:肚子饿了~ gw还是会做饭的,于是拿出了储藏的 ...
- 洛谷 P1417 烹调方案
题目背景 由于你的帮助,火星只遭受了最小的损失.但gw懒得重建家园了,就造了一艘飞船飞向遥远的earth星.不过飞船飞到一半,gw发现了一个很严重的问题:肚子饿了~ gw还是会做饭的,于是拿出了储藏的 ...
- P1417 烹调方案
P1417 烹调方案 题目提供者tinylic 标签 动态规划 难度 普及+/提高 题目背景 由于你的帮助,火星只遭受了最小的损失.但gw懒得重建家园了,就造了一艘飞船飞向遥远的earth星.不过飞船 ...
- P1417 烹调方案 (0/1背包+贪心)
题目背景 由于你的帮助,火星只遭受了最小的损失.但gw懒得重建家园了,就造了一艘飞船飞向遥远的earth星.不过飞船飞到一半,gw发现了一个很严重的问题:肚子饿了~ gw还是会做饭的,于是拿出了储藏的 ...
- [洛谷P1417 烹调方案]贪心+dp
http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3211Dream City Time Limit: 1 Second ...
- P1417 烹调方案 背包DP
题目背景 由于你的帮助,火星只遭受了最小的损失.但gw懒得重建家园了,就造了一艘飞船飞向遥远的earth星.不过飞船飞到一半,gw发现了一个很严重的问题:肚子饿了~ gw还是会做饭的,于是拿出了储藏的 ...
- 【洛谷】【动态规划/背包】P1417 烹调方案
由于你的帮助,火星只遭受了最小的损失.但gw懒得重建家园了,就造了一艘飞船飞向遥远的earth星.不过飞船飞到一半,gw发现了一个很严重的问题:肚子饿了~ gw还是会做饭的,于是拿出了储藏的食物准备填 ...
- luogu P1417 烹调方案
题目背景 由于你的帮助,火星只遭受了最小的损失.但gw懒得重建家园了,就造了一艘飞船飞向遥远的earth星.不过飞船飞到一半,gw发现了一个很严重的问题:肚子饿了~ gw还是会做饭的,于是拿出了储藏的 ...
- luogu P1417 烹调方案 |dp
题目背景 由于你的帮助,火星只遭受了最小的损失.但gw懒得重建家园了,就造了一艘飞船飞向遥远的earth星.不过飞船飞到一半,gw发现了一个很严重的问题:肚子饿了~ gw还是会做饭的,于是拿出了储藏的 ...
随机推荐
- input获得焦点和失去焦点
总结:placeholder因为在IE7 8 9 浏览器不支持所以没用它效果:当input获取光标的时候如果是默认提示则input内容为空.如果不是则为输入内容 当失去光标的时候, ...
- 正则表达式提取String子串
最近遇到了一个字符串处理的功能,忽然发现了正则表达式的强大,深深的被她的迷人魅力所吸引,以前只是听说,今天亲眼所见,亲身经历,真的彻底折服. 言归正传:java中String类里面封装了很多字符串处理 ...
- java设计模式03装饰者者模式
动态地给一个对象添加一些额外的职责.就增加功能来说, Decorator模式相比生成子类更为灵活.该模式以对客 户端透明的方式扩展对象的功能. (1)在不影响其他对象的情况下,以动态.透明的方式给单个 ...
- Centos6.7 编译安装 MySQL教程
Centos6.7 编译安装 MySQL # 安装依赖包 [root@localhost ~]# yum -y install gcc gcc-c++ autoconf* automake* zlib ...
- windows下使用批处理设置环境变量
1. 设置临时环境变量 set BAT_HOME=c:\bat 此命令只对当前窗口有效,批处理或cmd窗口一关闭,变量就恢复原来的值了. 2. 设置永久环境变量 方法一 setx BAT_HOME C ...
- Makefile精髓篇【转】
什么是makefile?或许非常多Winodws的程序猿都不知道这个东西,由于那些Windows的IDE都为你做了这个工作,但我觉得要作一个好的和professional的程序猿,makefile还是 ...
- 前端精选文摘:css之GFC 神奇背后的原理(整理)
CSS3 Grid Layout Web页面的布局,我们常见的主要有“浮动布局(float)”.“定位布局(position)”.“行内块布局(inline-block)”.“CSS3的多栏布局(Co ...
- 用python写一个百度翻译
运行环境: python 3.6.0 今天处于练习的目的,就用 python 写了一个百度翻译,是如何做到的呢,其实呢就是拿到接口,通过这个接口去访问,不过中间确实是出现了点问题,不过都解决掉了 先晾 ...
- mt_rand()和rand()两者的区别
在随机读取中使用了mt_rand(),而不适用rand(),他们两者的区别: mt_rand()是更好地随机数生成器,因为它跟rand()相比播下了一个更好地随机数种子:而且性能上比rand()快4倍 ...
- 在iOS项目中嵌入RN代码
1:在项目跟目录下创建一个ReactComponent文件夹.目录结构如下: 2: 在ReactComponent文件夹下新建一个 package.json 文件 { "name" ...