(点击此处查看原题)

题意

有n种食材,每种食材有三个属性,ai,bi和ci,如果在t时刻完成第i样食材则得到ai-t*bi的美味指数,用第i件食材做饭要花去ci的时间。问在T时间内,什么样的烹调方案使得美味指数最大,输出最大的美味指数

解题思路

简单看来,这就是一个01背包问题,但是不同之处在于这里每个食材的价值会因为时间而改变,所以对于每个时间点,我们需要考虑此时先选择哪一种食材

记now为当前时间,食材1的属性:a1,b1,c1,食材2的属性:a2,b2,c2

1)先选择食材1的总价值:a1 - (now  + c1) * b1 + a2 - (now + c1 + c2 ) * b2;

2)先选择食材2的总价值:a2 - (now  + c2) * b2 + a1 - (now + c1 + c2 ) * b1

两者比较一下,发现当 c1 * b2 < c2 * b1 的时候,先选取食材1的价值更大,那么我们就将n种食材按照这样的方式排序,随后就是01背包处理了

代码区

#include<iostream>
#include<cstdio>
#include<algorithm>
#define LOCAL = 1;
using namespace std;
typedef long long ll;
const int Max = 1e5 + ; struct Node
{
ll a, b, c;
} node[]; int v, n;
ll dp[Max]; //记录在第i时刻的最大价值 bool cmp(Node x, Node y)
{
return x.c * y.b < y.c * x.b;
} int main()
{
#ifdef LOCAL
// freopen("input.txt", "r", stdin);
// freopen("output.txt", "w", stdout);
#endif
scanf("%d%d", &v, &n);
for (int i = ; i <= n; i++)
scanf("%lld", &node[i].a);
for (int i = ; i <= n; i++)
scanf("%lld", &node[i].b);
for (int i = ; i <= n; i++)
scanf("%lld", &node[i].c); sort(node + , node + + n,cmp); for (int i = ; i <= n; i++)
{
for (int j = v; j >= node[i].c; j--)
{
dp[j] = max(dp[j], dp[j - node[i].c] + node[i].a - j * node[i].b);
}
}
ll max_val = ;
for (int j = ; j <= v; j++)
{
max_val = max(dp[j], max_val);
}
printf("%lld\n", max_val);
return ;
}

P1417 烹调方案(思维+01背包)的更多相关文章

  1. 洛谷 P1417 烹调方案 (01背包拓展)

    一看到这道题就是01背包 但是我注意到价值和当前的时间有关. 没有想太多,直接写,0分 然后发现输入方式不对-- 改了之后只有25分 我知道wa是因为时间会影响价值,但不知道怎么做. 后来看了题解,发 ...

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

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

  3. Luogu P1417烹调方案【dp/背包】By cellur925

    题目传送门 我们看到这道题,就会想起背包.于是我就一顿01背包敲,结果发现只有30分.后来看题解发现需要对输入的食材进行排序. 我们回想国王游戏一题,各位大臣的排列顺序会对权值造成影响,所以我们就预先 ...

  4. 【洛谷】【动态规划/背包】P1417 烹调方案

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

  5. P1417 烹调方案

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

  6. 【Luogu】P1417烹调方案(排序01背包)

    题目链接 对食材进行排序,重载运算符代码如下: struct food{ long long a,b,c; bool operator <(const food &a)const{ re ...

  7. P1417 烹调方案 背包DP

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

  8. P1417 烹调方案[背包]

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

  9. 洛谷P1417 烹调方案

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

随机推荐

  1. Spring Boot中@OneToMany与@ManyToOne几个需要注意的问题

    @OneToMany如果不加@JoinColumn,系统会自动在主从表中增加一个中间表. 主表: @Entity(name = "Post") public class Post  ...

  2. Linux创建删除文件和文件夹

    要想删除和创建,需要有root权限 [xwg@bogon ~]$ su root密码:[root@bogon xwg]# cd /home/a      切换到目录a[root@bogon a]# t ...

  3. IVIEW组件的render方法在Table组件中的使用

    后端项目地址:https://gitee.com/wlovet/table-server 前端项目地址:  https://gitee.com/wlovet/table-project 一.Rende ...

  4. [Vue] : vue-resource 实现 get, post, jsonp请求

    vue-resource 实现 get, post, jsonp请求 常见的数据请求类型:get,post,jsonp 除了vue-resource之外,还可以使用axios的第三方包实现实现数据的请 ...

  5. DataTable转List,DataTable转为Model对象帮助类

    DataTable转List,DataTable转为Model对象帮助类 public class ModelConvertHelper<T> where T : new() { publ ...

  6. Java关键字volatile的实现原理(四)

    简述 volatile 是轻量级的synchronized,在多线程开发中保证了共享变量的可见性.可见性就是当一个线程修改一个共享变量时,另一个线程可以读到修改的值.如果volatile变量使用恰当, ...

  7. [JZOJ6346]:ZYB和售货机(拓扑+基环内向森林)

    题目描述 可爱的$ZYB$来到一个售货机前. 售货机里有一共有$N(\leqslant 10^5)$个物品,每个物品有$A_i$个.自然,还有$N$个购买按钮.正常情况下,按下第$i$个按钮,需要支付 ...

  8. Liferay使用Structure和Template制作Video Portlet

    Liferay提供Structure和Teamplate机制,Structure定义以如何引入内容,Teamplate定义怎样展现内容,能快速为页面添加新内容展示. FlowPlayer是一款开源的W ...

  9. 【面试】ArrayList 和 HaseMap 的区别和应用场景

    ArrayLiat: ArrayList array = new ArrayList(); array.add("张三"); array.add("李四"); ...

  10. InnoDB缓存---InnoDB Buffer Pool

    InnoDB Buffer Pool 定义 对于InnoDB存储引擎,不管用户数据还是系统数据都是以页的形式存储在表空间进行管理的,其实都是存储在磁盘上的. 当InnoDB处理客户端请求,需要读取某页 ...