【codevs 3012】线段覆盖 4
来源:互联网 发布:c语言冒泡排序简单代码 编辑:程序博客网 时间:2024/05/16 08:50
o(nlogn)
我的做法是dp+二分
不知道数据结构维护会不会T
二分有几点要注意
pos初值 = 0
L = 1,R = i或i-1
更新是 dp[i] = max(dp[i-1],dp[pos]+e[i].w);
不是 dp[i] = max(dp[i],dp[pos]+e[i].w);
#include<bits/stdc++.h> using namespace std; #define Rep(i,a,b) for(int i=(a);i<=(b);i++) inline void get(int& x){char c=getchar();for(x=0;!isdigit(c);c=getchar());for(;isdigit(c);x=x*10+c-'0',c=getchar());}int n;typedef long long LL; #define maxn 1000010 struct Seg{ int l,r,w; }e[maxn]; LL dp[maxn]; bool cmp(Seg x,Seg y){ return x.r==y.r?x.l<y.l:x.r<y.r;} int main() { get(n); Rep(i,1,n)get(e[i].l),get(e[i].r),get(e[i].w); sort(e+1,e+1+n,cmp); for(int i=1;i<=n;i++)dp[i] = e[i].w; Rep(i,2,n) { int pos = 0,L=1,R=i-1,mid;while(L<=R){mid = (L+R)>>1;if(e[mid].r<=e[i].l){pos = mid;L = mid+1;}else{R = mid-1;}}dp[i] = max(dp[i-1],dp[pos]+e[i].w); } cout<<dp[n]; return 0; }
0 0
- 【codevs 3012】线段覆盖 4
- Codevs 3012 线段覆盖 4
- CODEVS 3012 线段覆盖 4
- codevs 3037 线段覆盖 5,codevs 3012 线段覆盖 4,codevs 3027 线段覆盖 2
- CodeVS 3012 & 3037 线段覆盖4 & 5
- codevs 线段覆盖1~4
- codevs 3012 线段覆盖4(dp+二分优化)
- codevs 1214 线段覆盖
- 【codevs 1214】线段覆盖
- Codevs 1214 线段覆盖
- CODEVS 1214线段覆盖
- codeVS 1214 线段覆盖
- codevs 1214 线段覆盖
- 线段覆盖 CODEVS
- 线段覆盖2 CODEVS
- Codevs 1214 线段覆盖
- codevs 线段覆盖系列
- [CODEVS 3037] 线段覆盖 5
- Android M 启动源码分析笔记之 - Init 进程
- 2016CCPC东北地区大学生程序设计竞赛-Mr. Frog’s Game
- Burp 1.6 无法抓取HTTPS解决办法
- 1003-Max Sum
- MD5 工具类
- 【codevs 3012】线段覆盖 4
- android studio 获取 SHA1与MD5
- 自定义edittext,酷炫效果
- Dubbo之HelloWorld
- 设置登录用户cookie值
- 广东国庆旅游
- Codeforces 455A Boredom【dp】
- CentOS 安装 supervisor 进程管理工具
- 用户以及文件管理基本命令