美味菜肴

美味菜肴

https://ac.nowcoder.com/acm/problem/14704

题意:在给定的时间内,选择做几种菜肴,然后让美味度最大
题解:第一眼01背包,然后再看,额,比01背包还多了个条件,就是,在不同的时间内做出来的菜,美味度会有变化,答案还可能负的(负的还能吃吗???,弥天大雾)
所以就是先进行贪心,把给定的数列处理成可以01背包的数列
既然是贪心,那么肯定图片说明 ,所以假设有图片说明 两种菜,那么选个菜就是图片说明图片说明两式相减,求贪心,化简得到图片说明 ,然后就可以进行贪心图片说明 了.
下来01背包拉进去
时间复杂度:图片说明

#include <bits/stdc++.h>
using namespace std;
const int N = 2e5 + 5;

struct Node {
  long long a, b, c;
} q[N];

long long s[N], dp[N],ans=-99999999;

bool cmp(Node x, Node y) { return x.c * s[y.a] < y.c * s[x.a]; }

int main() {
  int n, m, t;
  cin >> n >> m >> t;
  for (int i = 1; i <= n; i++) cin >> s[i];
  for (int i = 1; i <= m; i++) cin >> q[i].a >> q[i].b >> q[i].c;
  sort(q + 1, q + m + 1, cmp);
  for (int i = 1; i <= t; i++) dp[i] = -999999999;
  for (int i = 1; i <= m; i++)
    for (int j = t; j >= q[i].c; j--)
      dp[j] = max(dp[j], dp[j - q[i].c] + q[i].b - j * s[q[i].a]);
  for (int i = 1; i <= t; i++) ans= max(ans, dp[i]);
cout<<ans;
  return 0;
}
全部评论

相关推荐

点赞 评论 收藏
分享
06-12 17:46
门头沟学院 Java
运营你豪哥:来说重点: ​1.项目前置,时间倒序。​​ 2.​项目描述强化结果与量化效果(STAR原则里的R)。​​ ​3.个人技能精炼,明确掌握程度,突出核心。​​ ​4.增加强有力开头的个人总结部分。​​ 5.​优化教育背景(成绩排名)、合并奖项与活动。​​
听劝,我这个简历该怎么改...
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务