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还是会做饭的,于是拿出了储藏的 ...
随机推荐
- Mongo优化笔记
最近MongoDb服务器负载比较高,容易出问题,这里把优化的方式整理一下. 1.由于各个项目组共用一个mongo实例,所以一个项目组的问题会影响到别的项目组,所以需要把各个项目的数据从一个实例中剥离出 ...
- haproxy故障处理
1. haproxy 在配置健康检查的时候,默认没有配置页面检查 ,通过端口状态来检测.后端IIS web服务开始可能 是一个站点,或者采用了基于域名的配置方式,导致目前站点停了,后端主机不能被hap ...
- BeginEditorCommand()
BeginEditorCommand();开始把焦点给CAD CompleteEditorCommand();焦点给窗体
- 浅谈animation里的forwards
forwards可译为向前走, animation-fill-mode(动画填充模式),定义动画播放时间之外的状态 顾名思义,就是在动画播放完了之后给它一个状态 animation-fill-mode ...
- redis在linux下安装以及扩展
安装过redis后发现回头忘了,今天重新安装记录下 首先 我是在home下创建redis文件 mkdir redis 然后直接用wget安装 wget http://download.redis ...
- P2386 放苹果
题目背景 (poj1664) 题目描述 把M个同样的苹果放在N个同样的盘子里,允许有的盘子空着不放,问共有多少种不同的分发(5,1,1和1,1,5是同一种方法) 输入输出格式 输入格式: 第一行是测试 ...
- os、sys模块
os模块 os模块是与操作系统交互的一个接口 os.makedirs("dirname1/dirname2") # 可生成多层递归目录 os.removedirs("di ...
- 28.function_score自定义相关度分数算法
我们可以做到自定义一个function_score函数,自己将某个field的值,跟es内置算出来的分数进行运算,然后由自己指定的field来进行分数的增强 一.准备数据 给所有的帖子数据增加 ...
- 取代PHP原生函数的一些扩展包
前言 虽然程序员无时无刻都在造轮子,但造轮子也有效率之分,用好轮子才能造出好"
- 6.3.4 使用marshal 模块操作二进制文件
Python 标准库 marshal 也可以进行对象的序列化和反序列化,下面的代码进行了简单演示. import marshal x1 = 30 x2 = 5.0 x3 = [1,2,3] x4 = ...