链接:https://ac.nowcoder.com/acm/problem/21314
来源:牛客网

牛牛正在打一场CF
比赛时间为T分钟,有N道题,可以在比赛时间内的任意时间提交代码
第i道题的分数为maxPoints[i],题目的分数随着比赛的进行,每分钟减少pointsPerMinute[i]
这是一场比较dark的Cf,分数可能减成负数
已知第i道题需要花费 requiredTime[i] 的时间解决
请问最多可以得到多少分

输入描述:
第一行输入两个整数N,T (1 ≤ N ≤ 50, 1 ≤ T ≤ 100000)
第二行输入n个整数maxPoints[i]
第三行输入n个整数pointsPerMinute[i]
第四行输入n个整数requiredTime[i]
1 ≤ maxPoints[i],pointsPerMinute[i],requiredTime[i] ≤ 100000
输出描述:
输出一个整数
示例1
输入
复制
1 74
502
2
47
输出
复制
408
示例2
输入
复制
2 40000
100000 100000
1 100000
50000 30000
输出
复制
0
示例3
输入
复制
3 75
250 500 1000
2 4 8
25 25 25
输出
复制
1200
示例4
输入
复制
3 30
100 100 100000
1 1 100
15 15 30
输出
复制
97000
备注:
子任务1: n <= 10
子任务2: n <= 20
子任务3: 无限制
很明显的一道dp题目,但是这道题目起始dp是没办法dp的。首先这到题目特别像一个01背包的问题。但是每种物品的顺序不同,最终获得的份数又不同。那么应该怎么排序呢。我们假设现在有两件物品i和j,现在已经到达了时间t1,该怎么安排这两件物品呢?
假如先i后j,最终获得的分数为:point[i]-(t1+x)*min[i]+point[j]-(t1+x+y)*min[j]
假如先j后i,最终获得的分数为:point[j]-(t1+y)min[j]+point[i]-(t1+x+y)min[i]
(point[i]代表第i件物品的分数,min[i]代表着第i件物品每分钟降低的分数,x,y代表着解决这道题目需要的时间)
两下一作差,得到ymin[i]-xmin[j]。我们要最大化分数,所以我们要使这个差大于0。之后的问题就是01背包了。
代码如下:

#include<bits/stdc++.h>
#define ll long long
using namespace std;const int maxx=51;
const int maxm=1e5+100;
struct node{ll point;ll mint;ll time;friend bool operator <(const node a,const node b){return b.time*a.mint>a.time*b.mint;//如此排序}
}p[maxx];
ll dp[maxm]; //要开long long
int n,t;int main()
{while(~scanf("%d%d",&n,&t)){for(int i=1;i<=n;i++) scanf("%lld",&p[i].point);for(int i=1;i<=n;i++) scanf("%lld",&p[i].mint);for(int i=1;i<=n;i++) scanf("%lld",&p[i].time);sort(p+1,p+1+n);memset(dp,0,sizeof(dp));ll _max=0;for(int i=1;i<=n;i++){for(int j=t;j>=p[i].time;j--){dp[j]=max(dp[j],dp[j-p[i].time]+(p[i].point-(ll)(j)*(ll)p[i].mint));//这里相当于枚举这个问题解决的时间_max=max(_max,dp[j]);//不断的记录最大值。}}printf("%lld\n",_max);}
}

努力加油a啊,(o)/~

codeforces(牛客网dp专题,排序)相关推荐

  1. 牛客网dp专题 数位dp

    文章目录 数位dp 例题: NC116652 uva11038 How many 0's NC15035 送分了QAQ NC20669 诡异数字 NC20665 7的意志 NC17385 Beauti ...

  2. 牛客网 间单排序(LIS算法)

    链接:https://ac.nowcoder.com/acm/contest/547/F 来源:牛客网 题目描述 LXK有一个序列,从N~1,但是他不小心把序列打乱了,现在他想找你把这串序列复原. 他 ...

  3. 牛客网——B-栈和排序

    链接:https://www.nowcoder.com/acm/contest/58/B 来源:牛客网 题目描述 给你一个1->n的排列和一个栈,入栈顺序给定 你要在不打乱入栈顺序的情况下,对数 ...

  4. 牛客网-精华专题-前端校招面试题目合集

    前端校招面试题目合集 501 HTML CSS 前端基础 HTML 浏览器页面有哪三层构成,分别是什么,作用是什么? 构成:结构层(structural layer).表示层(presentation ...

  5. 牛客网之字符串排序与DNA合成

    题目描述: 输入一个长度不超过20的字符串,对所输入的字符串,按照ASCII码的大小从小到大进行排序,请输出排序后的结果 . 输入描述: 一个字符串,其长度n<=20 输出描述: 输入样例可能有 ...

  6. 牛客网数据库SQL实战答案解析下篇

    部分答案来自牛客网讨论分析 查找描述信息中包括robot的电影对应的分类名称以及电影数目,而且还需要该分类对应电影数量>=5部 SELECT c.name, COUNT(fc.film_id) ...

  7. 九、为了OFFER而战,那些日子在牛客网刷Linux面试题(下)

    @Author:Runsen @Date:2020/9/11 文章是Runsen在Gitchat付费文章分享:Linux 常用 Shell 命令,控制台的快捷键以及 Shell 编程 顺便同步到CSD ...

  8. 华为机试python编程题_牛客网华为机试题之Python解法

    牛客网华为机试题之Python解法 第1题 字符串最后一个单词的长度 a = input().split(" ") print(len(a[-1])) 第2题 计算字符个数 a = ...

  9. 牛客网暑期ACM多校训练营(第四场): B. Interval Revisited(DP)

    链接:https://ac.nowcoder.com/acm/contest/142/B 来源:牛客网 题目描述 Chiaki has a long interval [1,m] and n smal ...

最新文章

  1. 记录一个ansible高级用法与shell结合
  2. 交易性金融资产的账务处理实例
  3. win7下注册一个com失败,权限不够
  4. Android 系统构架(转)
  5. 安卓应用程序一般采用什么计算机语言开发,Kotlin 编程语言成为其 Android 应用程序开发人员的首选语言...
  6. Oracle中procedure和function创建举例
  7. 解决PD17虚拟机安装时出现 “操作失败 执行该操作失败”的方法
  8. 每日小记 2017.3.24
  9. 中国近红外成像行业市场供需与战略研究报告
  10. 怎么源码安装 PKGCONFIGPATH设置转
  11. web3.eth.estimateGas
  12. Dead Pixel
  13. 梅科尔工作室-PR第三次培训笔记(效果与转场及插件使用)
  14. 《码农翻身》各章节阅读连接
  15. Office办公 如何打印顺丰发票
  16. 太阳照常升起(C大调)
  17. NETDMIS5.0笛卡尔坐标系和矢量2023
  18. 因为工资补贴邮件被划空银行卡?搜狐全体员工被诈骗始末
  19. matlab短时过零率计算+源代码
  20. SVN Tortoise小乌龟在repo-browser上右键删除了文件目录 回滚解决办法

热门文章

  1. import cv2时ImportError: libjasper.so.1: cannot open shared object file: No such file or directory
  2. python 字典取值的时间复杂度_五道常见的Python面试题一定不要答错!
  3. pikachu安装以及安装时遇到的的问题——pikachu数据库链接不上config.inc.php 以及侧边栏访问没有反应,只有URL加了个#原因和解决办法
  4. mysql 5.8_mysql5.8安装指南
  5. makex机器人程序_收藏!MakeX 机器人挑战赛2018全球最新赛程和赛事手册公布
  6. osg::PositionAttitudeTransform旋转物体
  7. 华硕重装后进入bios_华硕笔记本重装系统后直接进入bios,怎么办
  8. 网络运维装linux,网络安装linux系统
  9. SVN使用和解决方案
  10. Object_id用法