codeforces(牛客网dp专题,排序)
链接: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专题,排序)相关推荐
- 牛客网dp专题 数位dp
文章目录 数位dp 例题: NC116652 uva11038 How many 0's NC15035 送分了QAQ NC20669 诡异数字 NC20665 7的意志 NC17385 Beauti ...
- 牛客网 间单排序(LIS算法)
链接:https://ac.nowcoder.com/acm/contest/547/F 来源:牛客网 题目描述 LXK有一个序列,从N~1,但是他不小心把序列打乱了,现在他想找你把这串序列复原. 他 ...
- 牛客网——B-栈和排序
链接:https://www.nowcoder.com/acm/contest/58/B 来源:牛客网 题目描述 给你一个1->n的排列和一个栈,入栈顺序给定 你要在不打乱入栈顺序的情况下,对数 ...
- 牛客网-精华专题-前端校招面试题目合集
前端校招面试题目合集 501 HTML CSS 前端基础 HTML 浏览器页面有哪三层构成,分别是什么,作用是什么? 构成:结构层(structural layer).表示层(presentation ...
- 牛客网之字符串排序与DNA合成
题目描述: 输入一个长度不超过20的字符串,对所输入的字符串,按照ASCII码的大小从小到大进行排序,请输出排序后的结果 . 输入描述: 一个字符串,其长度n<=20 输出描述: 输入样例可能有 ...
- 牛客网数据库SQL实战答案解析下篇
部分答案来自牛客网讨论分析 查找描述信息中包括robot的电影对应的分类名称以及电影数目,而且还需要该分类对应电影数量>=5部 SELECT c.name, COUNT(fc.film_id) ...
- 九、为了OFFER而战,那些日子在牛客网刷Linux面试题(下)
@Author:Runsen @Date:2020/9/11 文章是Runsen在Gitchat付费文章分享:Linux 常用 Shell 命令,控制台的快捷键以及 Shell 编程 顺便同步到CSD ...
- 华为机试python编程题_牛客网华为机试题之Python解法
牛客网华为机试题之Python解法 第1题 字符串最后一个单词的长度 a = input().split(" ") print(len(a[-1])) 第2题 计算字符个数 a = ...
- 牛客网暑期ACM多校训练营(第四场): B. Interval Revisited(DP)
链接:https://ac.nowcoder.com/acm/contest/142/B 来源:牛客网 题目描述 Chiaki has a long interval [1,m] and n smal ...
最新文章
- 记录一个ansible高级用法与shell结合
- 交易性金融资产的账务处理实例
- win7下注册一个com失败,权限不够
- Android 系统构架(转)
- 安卓应用程序一般采用什么计算机语言开发,Kotlin 编程语言成为其 Android 应用程序开发人员的首选语言...
- Oracle中procedure和function创建举例
- 解决PD17虚拟机安装时出现 “操作失败 执行该操作失败”的方法
- 每日小记 2017.3.24
- 中国近红外成像行业市场供需与战略研究报告
- 怎么源码安装 PKGCONFIGPATH设置转
- web3.eth.estimateGas
- Dead Pixel
- 梅科尔工作室-PR第三次培训笔记(效果与转场及插件使用)
- 《码农翻身》各章节阅读连接
- Office办公 如何打印顺丰发票
- 太阳照常升起(C大调)
- NETDMIS5.0笛卡尔坐标系和矢量2023
- 因为工资补贴邮件被划空银行卡?搜狐全体员工被诈骗始末
- matlab短时过零率计算+源代码
- SVN Tortoise小乌龟在repo-browser上右键删除了文件目录 回滚解决办法
热门文章
- import cv2时ImportError: libjasper.so.1: cannot open shared object file: No such file or directory
- python 字典取值的时间复杂度_五道常见的Python面试题一定不要答错!
- pikachu安装以及安装时遇到的的问题——pikachu数据库链接不上config.inc.php 以及侧边栏访问没有反应,只有URL加了个#原因和解决办法
- mysql 5.8_mysql5.8安装指南
- makex机器人程序_收藏!MakeX 机器人挑战赛2018全球最新赛程和赛事手册公布
- osg::PositionAttitudeTransform旋转物体
- 华硕重装后进入bios_华硕笔记本重装系统后直接进入bios,怎么办
- 网络运维装linux,网络安装linux系统
- SVN使用和解决方案
- Object_id用法