题目大意

  一共有$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 烹调方案的更多相关文章

  1. 洛谷P1417 烹调方案

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

  2. 洛谷 P1417 烹调方案

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

  3. P1417 烹调方案

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

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

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

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

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

  6. P1417 烹调方案 背包DP

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

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

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

  8. luogu P1417 烹调方案

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

  9. luogu P1417 烹调方案 |dp

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

随机推荐

  1. [ Luogu Contest 10364 ] TG

    \(\\\) \(\#A\) 小凯的数字 给出两个整数\(L,R\),从\(L\)到\(R\)按顺序写下来,求生成整数对\(9\)取模后的答案. 例如\(L=8,R=12\),生成的数字是\(8910 ...

  2. asp.net——登录界面

    题目: 在页面中放入两个TextBox分别用于输入用户名和密码,一个显示文字用的Label,一个提交按钮Button.点击按钮提交用户名和密码,如果用户名都密码正确(比如用户名admin 密码abc1 ...

  3. [Android]异常10-java.lang.OutOfMemoryError pthread_create (1040KB stack) failed: Try again

    背景:应用正常运行一段时间后,创建线程时出现应用重启,停止运行 异常原因: 可能一>堆内存溢出 解决办法有: 解决一>创建线程池,短时间能执行完成线程放在其中.(常驻线程例外),注意线程的 ...

  4. async await 同步方法调用异步方法死锁

    同步方法调用异步方法.GetAwaiter().GetResult()计算函数超时,异步方法所有的回调操作都会期望返回到主线程. 所以会导致各种线程死锁.异步方法中使用ConfigureAwait(f ...

  5. jstree CHECKBOX PLUGIN

    The checkbox plugin makes multiselection possible using three-state checkboxes. Configuration overri ...

  6. Find the build UUID in a Crash Report

    1) Find the build UUID in a Crash Report The first line in the "Binary Images:" section of ...

  7. ARX中类型强制转换

    比如 克隆 clone, 获得的是一个acrxobject, acrxobject *pobj=pployline->clone(); acdbpolyline *ppoly=acdbpolyl ...

  8. mstsc windows7/10远程桌面身份验证错误 要求的函数不受支持

    之前好好的能远程桌面连接到服务器,但是今天来就不能连接上了,并提示:身份验证错误.要求的函数不受支持. 猜想可能是Windows又更新了什么鬼,后面查询资料知道是由于CredSSP加密Oracle修正 ...

  9. jq购物车结算功能

    css *{font-style: normal} .gw{margin: 8px;} .gw::after{display: block;clear: both;content: '';margin ...

  10. Vector 二维数组 实现

    1.C++实现动态二维数组 int **p; p = ]; //注意,int*[10]表示一个有10个元素的指针数组 ; i < ; ++i) { p[i] = ]; } 2.利用指针数组实现二 ...