牛客网【每日一题】4月28日题目精讲 美味菜肴

链接:

时间限制:C/C++ 1秒,其他语言2秒
空间限制:C/C++ 32768K,其他语言65536K
64bit IO Format: %lld

题目描述

小明是个大厨,早上起来他开始一天的工作。他所在的餐厅每天早上都会买好n件食材(每种食材的数量可以视为无限),小明从到达餐厅开始就连续工作T时间。每道菜肴的制作需要特定的一种食材以及一段时间,但是食材一旦放久就不新鲜了,菜的美味值会降低。第i道菜肴有三个属性ai,bi,ci,ai是该菜肴的美味值,bi是该菜肴所选食材不新鲜的速率,如果在第t时刻完成第i道菜则美味值为:ai-t*bi,完成这道菜需要ci的时间。小明希望在这T时间内能做出菜肴使得总美味值最大,所以小明求助于你。

输入描述:

第1行输入三个整数n,m,T,分别代表食材种类,菜肴种类和工作时间。 第2行输入n个整数bi,代表第i个食材不新鲜的速率。
第3-n+2行,每行输入三个整数j,ai,ci,分别代表第i道菜肴需要的食材编号,菜肴的美味值,完成时间。
数据保证:0<n,m≤50,0<j≤n,其他值均<106,美味值必须通过完整做出菜肴得到,数据保证在规定时间内至少能完整做出1道菜肴。

输出描述:

输出一行,一个整数,表示最大总美味值。

示例1
输入
复制

1 1 74
2
1 502 47

输出
复制

408

示例2
输入
复制

2 2 10
2 1
1 100 8
2 50 3

输出
复制

84

备注:
最大总美味值可能为负。

题解:

看完题第一反应是比性价比(最近刚做了一个题),就是制造出一个评比标准,然后排序,进行美味值计算
两个菜肴x和y先后制作看看美味值
先x后y:a[x]−(sum+t[x])∗b[x]+a[y]−(sum+t[x]+t[y])∗b[y](1)
先y后x:a[y]−(sum+t[y])∗b[y]+a[x]−(sum+t[x]+t[y])∗b[x](2)
sum是之前所做的菜所用的时间
我们要知道哪个顺序做最佳,两者比较,假如说先x后y最佳,式子1>式子2,经过化简可以得到tx/bx<ty/by,除法多不好算,改成乘法
tx * by< ty* bx
然后我们可以用dp来做,01背包,dp[i]表示各个时间t完美味值情况
我用的结构体,edge[]
a美味值,b不新鲜速率,c时间,j顺序

dp[j]=max(dp[j],dp[j-edge[i].c]+edge[i].a-j*edge[edge[i].j].b);

dp[j-edge[i].c]+edge[i].a-jedge[edge[i].j].b中
第一个dp表示在做这个菜之前的时间内所得到的美味值
edge[i].a表示食材起初的美味值
j
edge[edge[i].j].b表示当前菜所要消耗的新鲜值
后两者相减为做这个菜所得到的美味值

#include<bits/stdc++.h>
typedef long long ll;
using namespace std;
const int inf=-1e9-2;
const int maxn=2e5+8;
ll sum=inf;//美味值可能是负值 
int n,m,t;
ll dp[maxn];
struct node{ll j,a,b,c;
}edge[maxn];
//bool max(int x,int y)
//{
//	return x<y;
//}
bool cmp(node x,node y)
{return x.c*edge[y.j].b<y.c*edge[x.j].b;
}
int main()
{scanf("%lld%lld%lld",&n,&m,&t);for(int i=1;i<=n;i++)scanf("%lld",&edge[i].b);for(int i=1;i<=m;i++)scanf("%lld%lld%lld",&edge[i].j,&edge[i].a,&edge[i].c);sort(edge+1,edge+1+m,cmp);
//	
//	for(int i=1;i<=m;i++)
//	{
//		cout<<edge[i].j<<" "<<edge[i].a<<" "<<edge[i].b<<" "<<edge[i].c<<endl;
//	}for(int i=1;i<=t;i++)dp[i]=inf;//dp赋最小值 for(int i=1;i<=m;i++)for(int j=t;j>=edge[i].c;j--){ll w= dp[j-edge[i].c]+ edge[i].a - j * edge[i].b;
//		printf("%lld %lld %lld\n ",dp[j-edge[i].c],edge[i].a,j * edge[i].b);dp[j]=max( dp[j] , dp[j-edge[i].c]+edge[i].a-j * edge[i].b);
//		printf("w=%lld,dp[%d]=%lld\n",w,j,dp[j]);} for(int i=1;i<=t;i++)sum=max(sum,dp[i]);cout<<sum<<endl;return 0;
} 
/*
2 2 10
2 1
1 100 8
2 50 3
*/
/*
100 2 8
50 1 3
*/

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/320252.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

UOJ284 快乐游戏鸡(树上动态规划问题、长链剖分+单调栈)

Description 一棵 n 个点的有根树&#xff0c;带点权 wi。 从 s 出发&#xff0c;希望达到 t&#xff0c;每秒可以从当前点移动到某一个儿子。 有一个死亡次数&#xff0c;初始为 0。若在某个点 i(i ! s, t) 时&#xff0c;死亡次数 ≤ wi&#xff0c;那么死亡次数自增 1&…

C#系列之聊聊.Net Core的InMemoryCache

这两天在看.net core的in memory cache&#xff0c;这里记录一下用法&#xff0c;主要涉及MemoryCache的Get&#xff0f;Set&#xff0f;Expire&#xff0f;Flush。首先我们先用dotnet命令创建一个mvc的项目&#xff0c;这里我们将使用postman来请求server&#xff0c;1dotnet …

P1412-经营与开发【dp】

正题 题目链接:https://www.luogu.com.cn/problem/P1412 题目大意 nnn个地点&#xff0c;有一个能力值为www的稿子 如果地点iii是资源型的&#xff0c;那么可以选择获得ai∗wa_i*wai​∗w的价值&#xff0c;且ww∗(1−k100)ww*(1-\frac{k}{100})ww∗(1−100k​)如果地点iii是…

纪中在家培训总结(2020.2.1~2020.2.24)

前言 因为新型冠状病毒&#xff08;疫情情况&#xff09;的原因&#xff0c;纪中培训改为在家培训&#xff0c;一天的进度变成了两天甚至三天的进度QAQ&#xff0c;但我还是想说&#xff1a;武汉加油&#xff01;中国加油&#xff01; 这次培训总结没啥好写&#xff0c;请勿嘲…

CF1137F Matches Are Not a Child‘s Play(树上数据结构问题、树链剖分+ODT)

Description 一棵 n 个点的树&#xff0c;点权最初为 1 ∼ n 的排列。 定义一个删点过程&#xff1a;每次找到权值最小的叶子&#xff0c;删去它以及连接的边&#xff0c;重复这个过程直到剩下一个点&#xff0c;然后删去最后的点。 处理 q 个询问&#xff1a; 将一个点 x 的…

小石的签到题

链接&#xff1a; 时间限制&#xff1a;C/C 1秒&#xff0c;其他语言2秒 空间限制&#xff1a;C/C 262144K&#xff0c;其他语言524288K 64bit IO Format: %lld题目描述 输入描述: 共一行&#xff0c;输入一个数 n 。 输出描述: 共一行&#xff0c;输出 “Shi” 或 “Yang”&…

值类型、引用类型和泛型的前世今生

值类型、引用类型和泛型多语言咱们先不说主题&#xff0c;先说说CLR支持多语言。 .net有个非常强大的特点&#xff0c;那就是跨语言&#xff0c;支持很多语言&#xff0c;比如C#、J#等。先来个图看一看C# J# VB 等等等

P3247-[HNOI2016]最小公倍数【分块,并查集】

正题 题目链接:https://www.luogu.com.cn/problem/P3247 题目大意 nnn个点mmm条边&#xff0c;每条边有(x,y,a,b)(x,y,a,b)(x,y,a,b)。qqq次询问(x′,y′,a′,b′)(x,y,a,b)(x′,y′,a′,b′)表示询问是否存在一条x′−>y′x->yx′−>y′的路径使得路径上amaxa′,bma…

【DP】奖励卡(jzoj 3937)

奖励卡 jzoj 3937 题目大意 现在有一场比赛&#xff0c;想观看的人要提交申请&#xff0c;现在有x个人提交后得到两个号&#xff0c;y个人提交后得到一个号&#xff0c;有n轮抽号&#xff0c;每一轮抽一个号&#xff08;概率相等&#xff09;&#xff0c;这个号的所有者不参…

CF526G Spiders Evil Plan(树上最优性问题、倍增+线段树)

Description 一棵 n 个结点的树&#xff0c;有正边权。 用 y 条链覆盖这棵树&#xff0c;满足&#xff1a; 所有链连通&#xff08;有重点即算作相连&#xff09;点 x 被覆盖被覆盖的边的权值和尽可能大 q 次给出 x, y&#xff0c;询问最大边权和&#xff0c;强制在线。 n, q…

CAP带你轻松玩转ASP.NETCore消息队列

CAP是什么&#xff1f;CAP是由我们园子里的杨晓东大神开发出来的一套分布式事务的决绝方案&#xff0c;是.Net Core Community中的第一个千星项目&#xff08;目前已经1656 Start&#xff09;&#xff0c;具有轻量级、易使用、高性能等特点。https://github.com/dotnetcore/CAP…

装备合成

链接&#xff1a; 时间限制&#xff1a;C/C 1秒&#xff0c;其他语言2秒 空间限制&#xff1a;C/C 262144K&#xff0c;其他语言524288K 64bit IO Format: %lld题目描述 输入描述: 输入包含t组数据 第一行一个整数t 接下来t行每行两个整数x,y 输出描述: 每组数据输出一行一个…

P4161-[SCOI2009]游戏【dp】

正题 题目链接:https://www.luogu.com.cn/problem/P4161 题目大意 一个1∼n1\sim n1∼n的排列&#xff0c;f(x)f(x)f(x)表示在置换xxx下置换多少次才能回到原来的排列&#xff0c;求在所有置换下f(x)f(x)f(x)的所有可能的值的数量。 解题思路 一个置换的fff值就是这个置换的…

【spfa】假期计划(jzoj 3936)

假期计划 jzoj 3936 题目大意 给你一个有向图&#xff08;n,m⩽20000n,m\leqslant 20000n,m⩽20000&#xff09;&#xff0c;现在有一些作为枢纽的点&#xff0c;且保证每一条边的两个点至少有一个是枢纽点&#xff0c;现在给q个询问&#xff0c;问某一个点到另一个点的最短…

CF650E Clockwork Bomb(树上构造类问题、并查集)

Description 给出两棵 n 结点的有标号树。 每次操作删去第一棵树的一条边&#xff0c;再加上一条边&#xff0c;需要保证此时还是一棵树。 构造一种操作序列&#xff0c;将第一棵树变成第二棵树&#xff0c;使得操作数最小。 n ≤ 51055 \times 10^55105 Solution 显然&…

微软必应从.NET Core 2.1获得了性能提升

据微软工程师Mukul Sabharwal介绍&#xff0c;在将微软搜索引擎必应迁移到.NET Core 2.1之后&#xff0c;内部服务延迟降低了34%&#xff0c;这主要归功于.NET社区贡献的改进。按照Sabharwal的说法&#xff0c;.NET Core的多项改进贡献了大部分的性能提升&#xff0c;包括字符串…

阶乘

链接&#xff1a; 时间限制&#xff1a;C/C 1秒&#xff0c;其他语言2秒 空间限制&#xff1a;C/C 262144K&#xff0c;其他语言524288K 64bit IO Format: %lld题目描述 给定一个正整数 p 求一个最小的正整数 n&#xff0c;使得 n! 是 p 的倍数 输入描述: 第一行输入一个正整数…

P2151-[SDOI2009]HH去散步【矩阵乘法】

正题 题目链接:https://www.luogu.com.cn/problem/P2151 题目大意 nnn个点mmm条边的一张无向图&#xff0c;走过一条边后下一次就不能再走这条&#xff0c;求AAA到BBB之间有多少长度为ttt的路径。 解题思路 因为有不能再走同一条的限制&#xff0c;所以不能直接裸上矩乘&…

IQ测试(jzoj 5048)

IQ测试 jzoj 5048 题目大意 给出一个序列a&#xff0c;然后有m个询问&#xff0c;每个询问给出一个序列&#xff0c;问这个序列是否可以由序列a删掉一些数得到的 输入样例 7 1 5 4 5 7 8 6 4 5 1 5 5 8 6 3 2 2 2 3 5 7 8 4 1 5 7 4输出样例 TAK NIE TAK NIE数据范围 对…

CF1088F Ehab and a weird weight formula(树上最优性问题、贪心+倍增)

Description 给出一棵 n 个结点的树&#xff0c;点 i 有正权值 wiw_iwi​&#xff0c;wiw_iwi​ 互不相同。 除了权值最小的点&#xff0c;保证每个点 u 都有一个邻点 v 使得 wvw_vwv​ < wuw_uwu​。 构造一棵树&#xff0c;最小化代价&#xff1a; 对于每个点 u&#xf…