Gym 100829S_surf 动态规划的优化
题目大意是,非你若干个任务,任务分别对应开始时间、预期收益、持续时间三项指标,让你从中选择一个受益最大的方案(没有开始时间相同的任务)。
于是,标准状态转移方程应当为,设DP[K]为选择了前K个任务的最大收益,后面转移为DP[K+1]=MAX且能够共存的(DP[I]);很容易想到N^2的暴力更新,但是这题数量太大,会炸得连渣都不剩。于是需要优化到较低的数量级(比如NLOGN)
注意到,我们也许不用对某个任务来选取前K个的最大值,不容易想到优化但是想想刘汝佳同志的话——不方便直接求解的时候想想更新状态看看,于是就变成了状态更新公式而不是状态转移方程。——对于求得的DP[K]更新所有合法 的,大于K的DP值。注意到,当前序列已经经过了排序,所以,当找到第一个合法的DP[P]P>K时候,就会有P+1也是合法的状态,因此很容易想到树状数组相对最大值+二分查找确定位置(只要有比较函数就可以写二分)。最后复杂度是NLOGN。
另外根据某些奇怪的树上的书法,,任何一个动态规划的优化算法都应当从如下三个状态进行考虑:
1、状态总数 N N
2、决策数 N 1
3、状态转移时间复杂度 1 LOGN
分别对应原始DP和优化后的DP
AC代码如下:考虑到没有校园网所以在VJ上面交的。。。于是投篮用了万能头文件,好孩子不要学我哟~
#include<bits/stdc++.h>
using namespace std; const long long MAXN=; class Mession
{
public:
long long a,b,p;
};Mession messions[MAXN];
long long tree[MAXN];
long long dp[MAXN];
long long n;
void insert(int pos,long long key)
{
while(pos<=n)
{
tree[pos]=max(key,tree[pos]);
pos+=pos&(-pos);
}
}
long long getSum(int pos)
{
long long ans=;
while(pos)
{
ans=max(tree[pos],ans);
pos-=pos&(-pos);
}return ans;
}
bool cmp(Mession m1,Mession m2)
{
return m1.a<m2.a;
}
void init()
{
cin>>n;
for(int i=;i<=n;++i)
{
cin>>messions[i].a>>messions[i].p>>messions[i].b;
messions[i].b+=messions[i].a;
}sort(messions+,messions+n+,cmp);
long long ans=;
for(int i=;i<=n;++i)
{
dp[i]=messions[i].p;
dp[i]+=getSum(i);
Mession mm;mm.a=messions[i].b;
int pos=lower_bound(messions+,messions++n,mm,cmp)-messions;
insert(pos,dp[i]);
ans=max(dp[i],ans);
}
cout<<ans<<endl;
} int main()
{
cin.sync_with_stdio(false);
init();
return ;
}
Gym 100829S_surf 动态规划的优化的更多相关文章
- 【学习笔记】动态规划—斜率优化DP(超详细)
[学习笔记]动态规划-斜率优化DP(超详细) [前言] 第一次写这么长的文章. 写完后感觉对斜优的理解又加深了一些. 斜优通常与决策单调性同时出现.可以说决策单调性是斜率优化的前提. 斜率优化 \(D ...
- 剑指 Offer 60. n个骰子的点数 + 动态规划 + 空间优化
剑指 Offer 60. n个骰子的点数 Offer_60 题目详情 题解分析 package com.walegarrett.offer; /** * @Author WaleGarrett * @ ...
- [bzoj1911][Apio2010特别行动队] (动态规划+斜率优化)
Description Input Output Sample Input - - Sample Output HINT Solution 斜率优化动态规划 首先易得出这样的一个朴素状态转移方程 f[ ...
- [bzoj1597][usaco2008 mar]土地购买 (动态规划+斜率优化)
Description 农夫John准备扩大他的农场,他正在考虑N (1 <= N <= 50,000) 块长方形的土地. 每块土地的长宽满足(1 <= 宽 <= 1,000, ...
- [luogu3648][bzoj3675][APIO2014]序列分割【动态规划+斜率优化】
题目大意 让你把一个数列分成k+1个部分,使分成乘积分成各个段乘积和最大. 分析 首先肯定是无法开下n \(\times\) n的数组,那么来一个小技巧:因为我们知道k的状态肯定是从k-1的状态转移过 ...
- 动态规划(斜率优化):BZOJ 3675 [Apio2014]序列分割
Description 小H最近迷上了一个分割序列的游戏.在这个游戏里,小H需要将一个长度为N的非负整数序列分割成k+l个非空的子序列.为了得到k+l个子序列, 小H将重复进行七次以下的步骤: 1.小 ...
- 动态规划(斜率优化):BZOJ 1010 【HNOI2008】 玩具装箱
玩具装箱toy Time Limit: 1 Sec Memory Limit: 162 MBSubmit: 8218 Solved: 3233[Submit] Description P 教授要去 ...
- BZOJ 1096: [ZJOI2007]仓库建设(动态规划+斜率优化)
第一次写斜率优化,发现其实也没啥难的,没打过就随便找了一份代码借(chao)鉴(xi)下,不要介意= = 题解实在是懒得写了,贴代码吧= = CODE: #include<cstdio># ...
- UOJ#104. 【APIO2014】Split the sequence 动态规划 斜率优化
原文链接www.cnblogs.com/zhouzhendong/p/UOJ104.html 题解 首先证明一个结论:对于一种分割方案,分割的顺序不影响最终结果. 证明:对于树 a[x] 和 a[y] ...
随机推荐
- Swift-字符串
1.字符串的遍历 //NSString 不支持一下字符串的遍历 let str = "我要飞的更高" for c in str.characters{ print(c) } 2.字 ...
- RabbitMQ 消息的可靠投递
mq 提供了两种方式确认消息的可靠投递 confirmCallback 确认模式 returnCallback 未投递到 queue 退回模式 在使用 RabbitMQ 的时候,作为消息发送方希望杜绝 ...
- 符号替换问题:请实现一个函数,将一个字符串中的空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。
public class Solution { public String replaceSpace(StringBuffer str) { String str1=str.toString(); c ...
- AngularJS(十):依赖注入
本文也同步发表在我的公众号“我的天空” 依赖注入 依赖注入不是AngularJS独有的概念,而是现代软件开发与架构的范畴,但是在AngularJS中“依赖注入”是其核心思想之一,所以我们专门来学习一下 ...
- java基础概念整理综合 及补充(jdk1.8)
2018 java基础 笔记回顾摘要 一 1,html 与 注释: <!-- --> 注释不能嵌套 代码都得有注释. 2,空格符: 3,css选择的优先级: id选择器 > ...
- static int a
static int a只被本文件可见,外部文件不可见;而int a如果在外部文件作以下声明: extern int a,那么它在声明的文件里也是可见的 详见:http://bbs.csdn.net/ ...
- IOS Quarzt2D 手动的释放
- (void)drawRect:(CGRect)rect { // 1.获取上下文 CGContextRef ctx = UIGraphicsGetCurrentContext(); // 2.绘制 ...
- Aizu 2170 Marked Ancestor(并查集变形)
寻找根节点很容易让人联想到DisjointSet,但是DisjointSet只有合并操作, 所以询问离线倒着考虑,标记会一个一个消除,这时候就变成合并了. 因为询问和查询的时间以及标记生效的时间有关, ...
- hdu-1532 Drainage Ditches---最大流模板题
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=1532 题目大意: 给出有向图以及边的最大容量,求从1到n的最大流 思路: 传送门:最大流的增广路算法 ...
- c++连接mysql并提示“无法解析的外部符号 _mysql_server_init@12”解决方法&提示缺少“libmysql.dll”
课程作业要用c++连接mysql server,但是出现些小问题,经查阅资料已经解决,做一下笔记. 环境:vs2017, mysql版本是8.0.16-winx64. 设置项目属性 项目 - C ...