NYOJ 720 DP+二分
项目安排
- 描述
- 小明每天都在开源社区上做项目,假设每天他都有很多项目可以选,其中每个项目都有一个开始时间和截止时间,假设做完每个项目后,拿到报酬都是不同的。由于小明马上就要硕士毕业了,面临着买房、买车、给女友买各种包包的鸭梨,但是他的钱包却空空如也,他需要足够的money来充实钱包。万能的网友麻烦你来帮帮小明,如何在最短时间内安排自己手中的项目才能保证赚钱最多(注意:做项目的时候,项目不能并行,即两个项目之间不能有时间重叠,但是一个项目刚结束,就可以立即做另一个项目,即项目起止时间点可以重叠)。
- 输入
- 输入可能包含多个测试样例。
对于每个测试案例,输入的第一行是一个整数n(1<=n<=5000):代表小明手中的项目个数。
接下来共有n行,每行有3个整数st、ed、val,分别表示项目的开始、截至时间和项目的报酬,相邻两数之间用空格隔开。
st、ed、value取值均在32位有符号整数(int)的范围内,输入数据保证所有数据的value总和也在int范围内。 - 输出
- 对应每个测试案例,输出小明可以获得的最大报酬。
- 样例输入
-
3
1 3 6
4 8 9
2 5 16
4
1 14 10
5 20 15
15 20 8
18 22 12 - 样例输出
-
16
22 - 提示
- 上传时数据加强,项目起始时间和终止时间可能相同(其他oj可能无此情况)
- 来源
- 网易有道2013年校园招聘面试二面试题
- 上传者
- 勿念情
- 感觉N^2也可以过啊,T了,后来用的二分A掉,二分写炸了调了半天最后发现排序小标写错了,ccc
- dp[i]表示前i个项目可获得的最大价值,则dp[i]=max(dp[i-1],solve(i-1)+P[i].val)
- solve()就是我们要找的在满足与目标项目不交叉的情况下的最大价值。
- 由于要二分查找显然dp[]数组必须有序,所以dp[i]表示前i个项目可获得的最大价值,这样的话二分找到的某个合法项目之前的项目显然也在目标项目之前且不交叉。
- #include<bits/stdc++.h>
using namespace std;
#define inf 0x3f3f3f3f;
struct node
{
int st,ed,val;
bool operator<(const node &c)const{
if(st==c.st&&ed==c.ed) return val>c.val;
if(ed==c.ed) return st<c.st;
return ed<c.ed;
}
}P[5005];
int dp[5005];
int solve(int t)
{
if(!t) return 0;
int l=1,r=t,mid,i,j,k,ans=0;
while(l<r){
mid=r-(r-l)/2;
if(P[mid].ed<=P[t+1].st){
l=mid;
}
else{
r=mid-1;
}
}
if(l==r&&P[l].ed<=P[t+1].st) return dp[l];
return 0;}
int main()
{
int N,i,j,k;
node a,b;
while(cin>>N){
for(i=1;i<=N;++i){
scanf("%d%d%d",&P[i].st,&P[i].ed,&P[i].val);
}
sort(P+1,P+N+1);
for(i=1;i<=N;++i){
dp[i]=max(solve(i-1)+P[i].val,dp[i-1]);
}
printf("%d\n",dp[N]);
}
return 0;
}
NYOJ 720 DP+二分的更多相关文章
- HDU 3433 (DP + 二分) A Task Process
题意: 有n个员工,每个员工完成一件A任务和一件B任务的时间给出,问要完成x件A任务y件B任务所需的最短时间是多少 思路: DP + 二分我也是第一次见到,这个我只能说太难想了,根本想不到. dp[i ...
- 两种解法-树形dp+二分+单调队列(或RMQ)-hdu-4123-Bob’s Race
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=4123 题目大意: 给一棵树,n个节点,每条边有个权值,从每个点i出发有个不经过自己走过的点的最远距离 ...
- POJ-2533最长上升子序列(DP+二分)(优化版)
Longest Ordered Subsequence Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 41944 Acc ...
- hdu2993之斜率dp+二分查找
MAX Average Problem Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Othe ...
- poj3208 Apocalypse Someday 数位dp+二分 求第K(K <= 5*107)个有连续3个6的数。
/** 题目:poj3208 Apocalypse Someday 链接:http://poj.org/problem?id=3208 题意:求第K(K <= 5*107)个有连续3个6的数. ...
- hdu 1025:Constructing Roads In JGShining's Kingdom(DP + 二分优化)
Constructing Roads In JGShining's Kingdom Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65 ...
- 【bzoj3312】[Usaco2013 Nov]No Change 状态压缩dp+二分
题目描述 Farmer John is at the market to purchase supplies for his farm. He has in his pocket K coins (1 ...
- [Codeforces 865C]Gotta Go Fast(期望dp+二分答案)
[Codeforces 865C]Gotta Go Fast(期望dp+二分答案) 题面 一个游戏一共有n个关卡,对于第i关,用a[i]时间通过的概率为p[i],用b[i]通过的时间为1-p[i],每 ...
- 1. 线性DP 887. 鸡蛋掉落 (DP+二分)
887. 鸡蛋掉落 (DP+二分) https://leetcode-cn.com/problems/super-egg-drop/ /*首先分析1个蛋,1个蛋的话,最坏情况需要N次,每次只能从0 1 ...
随机推荐
- 组织机构代码校验码生成算法(C#版)
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...
- LaTeX:Question & Answer
tikz 宏包中循环 foreach 的使用方法 矩阵环境输入 displaystyle 分式与垂直间距的设置 在 LaTeX 中使用 mathrsfs 宏包遇到 "rsfs7.tfm&qu ...
- spring boot实战(第一篇)第一个案例
版权声明:本文为博主原创文章,未经博主允许不得转载. 目录(?)[+] spring boot实战(第一篇)第一个案例 前言 写在前面的话 一直想将spring boot相关内容写成一个系列的 ...
- PL/SQL Developer登入时候报ORA-12638
在client安装目录,找到打开sqlnet.ora 在里面找到 SQLNET.AUTHENTICATION_SERVICES= (NTS)将其更改为: SQLNET.AUTHENTICATION_S ...
- Tensorflow 实战Google深度学习框架 第五章 5.2.1Minister数字识别 源代码
import os import tab import tensorflow as tf print "tensorflow 5.2 " from tensorflow.examp ...
- php curl采集数据问题汇总
1. 使用curl获取网页数据提示: "curl: (6) Could not resolve host: xxx.xxx.com ; Name or service not known&q ...
- 【css a标签 鼠标悬浮时变手型】
<a href="#" style="cursor:pointer">
- SNMP 原理及配置简述 net-snmp-utils net-snmp 第2版基于SNMP 群体名(community name) 第3版引入了安全性更高的访问控制方法 SNMP协议操作只有4种 Apache的php_snmp 模块
SNMP 原理及配置简述 net-snmp-utils net-snmp 第2版基于SNMP 群体名(community name) 第3版引入了安全性更高的访问控制方法 SNMP协议操作只有4种 ...
- hdu5072 容斥+枚举
这题说的是给了 n 个数字 每个数值大于1 小于100000,n小于100000 ,找出满足下面要求的三人组有多少种 比如abc ( (ab)==(bc)==(ac) ==1 )||( (ab)!=1 ...
- Tomcat java.lang.OutOfMemoryError: PermGen space error
Often time, Tomcat may hits the following java.lang.OutOfMemoryError: PermGen space error. java.lang ...