由于你的帮助,火星只遭受了最小的损失。但gw懒得重建家园了,就造了一艘飞船飞向遥远的earth星。不过飞船飞到一半,gw发现了一个很严重的问题:肚子饿了~

gw还是会做饭的,于是拿出了储藏的食物准备填饱肚子。gw希望能在T时间内做出最美味的食物,但是这些食物美味程度的计算方式比较奇葩,于是绝望的gw只好求助于你了。

题目背景

【题目描述:】

一共有n件食材,每件食材有三个属性,ai,bi和ci,如果在t时刻完成第i样食材则得到ai-t*bi的美味指数,用第i件食材做饭要花去ci的时间。

众所周知,gw的厨艺不怎么样,所以他需要你设计烹调方案使得美味指数最大

【输入格式:】

第一行是两个正整数T和n,表示到达地球所需时间和食材个数。

下面一行n个整数,ai

下面一行n个整数,bi

下面一行n个整数,ci

【输出格式:】

输出最大美味指数

[算法分析:]

看似无法用DP做,因为在t时刻完成第i样食材则得到ai-t*bi的美味指数,而不是ai

完成食材的顺序不定,获得的最大美味指数也是不同的。

如果条件是“完成第i样食材获得ai的美味指数”,就是简单的01背包。

那如何使得顺序是最优(即同一时刻做的食材美味指数大的放在前面)呢?

对于两个食材x, y,设t为已用时间

先做x的美味指数为:

  a[x] - t * b[x] + a[y] - (t + c[x]) * b[y]

 = a[x] - t * b[x] + a[y] - t * b[y] - c[x] * b[y]

 = a[x] + a[y] - t * (b[x] + b[y]) - c[x] * b[y]

先做y的美味指数为:

  a[y] - t * b[y] + a[x] - (t + c[y]) * b[x]

 = a[y] - t * b[y] + a[x] - t * b[x] - c[y] * b[x]

 = a[x] + a[y] - t * (b[x] + b[y]) - c[y] * b[x]

不难看出,如果要使得先做x的美味指数>先做y的美味指数,则c[x] * b[y] < c[y] * b[x],

即这道题的排序规则

剩下的事情就是01背包了

[Code:]

 //P1417 烹调方案
#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
typedef long long LL; const int MAXN = + ;
const int MAXM = + ; int n, T;
LL f[MAXM];
struct Food {
LL a, b, c;
}h[MAXN]; inline bool cmp(Food x, Food y) {
return y.b * x.c < x.b * y.c;
} int main() {
scanf("%d%d", &T, &n);
for(int i=; i<=n; ++i) scanf("%lld", &h[i].a);
for(int i=; i<=n; ++i) scanf("%lld", &h[i].b);
for(int i=; i<=n; ++i) scanf("%lld", &h[i].c);
sort(h + , h + n + , cmp);
for(int i=; i<=n; ++i)
for(int j=T; j>=h[i].c; --j)
f[j] = max(f[j], f[j - h[i].c] + h[i].a - j * h[i].b);
LL ans = ;
for(int i=; i<=T; ++i)
ans = max(ans, f[i]);
printf("%lld\n", ans);
}

【洛谷】【动态规划/背包】P1417 烹调方案的更多相关文章

  1. P1417 烹调方案

    P1417 烹调方案 题目提供者tinylic 标签 动态规划 难度 普及+/提高 题目背景 由于你的帮助,火星只遭受了最小的损失.但gw懒得重建家园了,就造了一艘飞船飞向遥远的earth星.不过飞船 ...

  2. 洛谷P1417 烹调方案

    题目背景 由于你的帮助,火星只遭受了最小的损失.但gw懒得重建家园了,就造了一艘飞船飞向遥远的earth星.不过飞船飞到一半,gw发现了一个很严重的问题:肚子饿了~ gw还是会做饭的,于是拿出了储藏的 ...

  3. 洛谷 P1417 烹调方案

    题目背景 由于你的帮助,火星只遭受了最小的损失.但gw懒得重建家园了,就造了一艘飞船飞向遥远的earth星.不过飞船飞到一半,gw发现了一个很严重的问题:肚子饿了~ gw还是会做饭的,于是拿出了储藏的 ...

  4. [洛谷P1417 烹调方案]贪心+dp

    http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3211Dream City Time Limit: 1 Second     ...

  5. P1417 烹调方案 (0/1背包+贪心)

    题目背景 由于你的帮助,火星只遭受了最小的损失.但gw懒得重建家园了,就造了一艘飞船飞向遥远的earth星.不过飞船飞到一半,gw发现了一个很严重的问题:肚子饿了~ gw还是会做饭的,于是拿出了储藏的 ...

  6. P1417 烹调方案 背包DP

    题目背景 由于你的帮助,火星只遭受了最小的损失.但gw懒得重建家园了,就造了一艘飞船飞向遥远的earth星.不过飞船飞到一半,gw发现了一个很严重的问题:肚子饿了~ gw还是会做饭的,于是拿出了储藏的 ...

  7. P1417 烹调方案[背包]

    题目背景 由于你的帮助,火星只遭受了最小的损失.但gw懒得重建家园了,就造了一艘飞船飞向遥远的earth星.不过飞船飞到一半,gw发现了一个很严重的问题:肚子饿了~ gw还是会做饭的,于是拿出了储藏的 ...

  8. P1417 烹调方案(思维+01背包)

    (点击此处查看原题) 题意 有n种食材,每种食材有三个属性,ai,bi和ci,如果在t时刻完成第i样食材则得到ai-t*bi的美味指数,用第i件食材做饭要花去ci的时间.问在T时间内,什么样的烹调方案 ...

  9. 【CJOJ1494】【洛谷2756】飞行员配对方案问题

    题面 题目背景 第二次世界大战时期.. 题目描述 英国皇家空军从沦陷国征募了大量外籍飞行员.由皇家空军派出的每一架飞机都需要配备在航行技能和语言上能互相配合的2 名飞行员,其中1 名是英国飞行员,另1 ...

随机推荐

  1. sql判断某个字段是否为空

    判断sql某个字段是否为NULL public function dataNull($id){ $sql = 'SELECT * FROM `vvt_company_funcs_user` WHERE ...

  2. 关于Google圆角高光高宽自适应按钮及其拓展

    关于Google圆角高光高宽自适应按钮及其拓展————源自张鑫旭css讲解 这篇文章发布于 2009年10月24日,星期六,18:08,归类于 css相关. 阅读 48770 次, 今日 1 次 by ...

  3. 一文告诉你 Event Loop 是什么?

    Event Loop 也叫做"事件循环",它其实与 JavaScript 的运行机制有关. JS初始设计 JavaScript 在设计之初便是单线程,程序运行时,只有一个线程存在, ...

  4. onscroll事件没有响应的原因以及vue.js中添加onscroll事件监听的方法

    1 onscroll事件失效 <!DOCTYPE html> <html> <head> <meta charset="utf-8"> ...

  5. 禅道Bug管理工具环境搭建

    下载地址:http://sourceforge.net/projects/zentao/files/8.2/ZenTaoPMS.8.2.stable.exe/download 1.解压ZenTaoPM ...

  6. 手动搭建 redis 集群

    转自http://meia.fun/article/1544161420745 手动搭建 redis 集群 redis 基本命令: 启动 redis 服务:redis-server xxx.conf ...

  7. asar 如何解密加密?electron 的 asar 的具体用法

    来源:https://newsn.net/say/electron-asar.html 在electron中,asar是个特殊的代码格式.asar包里面包含了程序猿编写的代码逻辑.默认情况下,这些代码 ...

  8. Redis 入门之基础

    1.安装 redis-windows redis服务端下载 redis客户端下载 redis官网 redis中文网 1.1 Window下安装 redis-server.exe redis.windo ...

  9. [UI] 精美UI界面欣赏[6]

    精美UI界面欣赏[6]

  10. iOS8 CIGlassDistortion滤镜的使用

    iOS8 CIGlassDistortion滤镜的使用 此为CoreImage滤镜的使用 素材 效果 混合用图片 源码: // // ViewController.m // CIGlass // // ...