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 ...
随机推荐
- Mybatis解决sql中like通配符模糊匹配 构造方法覆盖 mybits 增删改
<select id="getRecByNameWildcard" parameterType="Student" resultMap="res ...
- 人工智能(Machine Learning)—— 机器学习
https://blog.csdn.net/luyao_cxy/article/details/82383091 转载:https://blog.csdn.net/qq_27297393/articl ...
- python中的Redis键空间通知(过期回调)
介绍 Redis是一个内存数据结构存储库,用于缓存,高速数据摄取,处理消息队列,分布式锁定等等. 使用Redis优于其他内存存储的优点是Redis提供持久性和数据结构,如列表,集合,有序集和散列. 在 ...
- [GDAL]编译64位GDAL1.10
环境VS2010,swigwin-2.0.11 1. 打开nmake.opt文件,找到SWIG=swig.exe这一句,假如没有将swig的目录添加到环境变量中,那么将这句后面的swig.exe修改为 ...
- mac 零碎
查看主机名 import socket socket.gethostname() 可以这样安装postgresql 安装postgresql, 输入 brew install postgresql 安 ...
- cocos进阶教程(5)各种动画使用心得
Node类 不解释 ActionTimeline类是一个3.0时代的动画类, 案例一 //建立node方案一Data data = FileUtils::getInstance()->getDa ...
- wcf 远程服务器返回了意外响应: (413) Request Entity Too Large。
我遇到这个问题的原因是:我使用asp.net 网站调用wcf服务后,通过方法提交数据产生的.我提交的数据是一个实体,包含很多字符串和图片格式的二进制数据超过4M 就报个错误. 后来同事帮忙解决了.他说 ...
- WebService—规范介绍和几种实现WebService的框架介绍
一.关于SOA(面向服务架构)思想 1.关于协议 2.SOA 的诞生 SOA(Service-Oriented Architecture)面向服务架构是一种思想,它将应用程序的不同功能单元通过 ...
- [LeetCode]206. Reverse Linked List(链表反转)
Reverse a singly linked list. click to show more hints. Subscribe to see which companies asked this ...
- uva1025 dp
这题说的是给了n个车站 从1号 车站到 n号车站,有m1辆车从1 开往n 有m2 辆车从n 开往1 一个人从1 车站 到达n 车站在T 时刻 要求再 车站呆的时间尽量少 dp[i][j] 表示 在 第 ...