UVALive - 7722 The 2016 ACM-ICPC Asia Jakarta Regional Contest L - Tale of a Happy Man dp+线段树
2017-10-22 23:51
567 查看
出的第三题。。弱渣不会dp。不会数据结构。。
这题完全靠队友,我:这可能是个背包吧。
zhenglingdalao:我用个线段树优化下dp吧。
第一发wa了,int改成long long ac nlogn过了 我:。。。。。
题意:有M件事可以选做,每件事有一个价值和一个占用的时间段,要求选择做的每件事之间时间不冲突,其余无要求。
什么都不会的渣渣瑟瑟发抖。。
附上队友代码:
这题完全靠队友,我:这可能是个背包吧。
zhenglingdalao:我用个线段树优化下dp吧。
第一发wa了,int改成long long ac nlogn过了 我:。。。。。
题意:有M件事可以选做,每件事有一个价值和一个占用的时间段,要求选择做的每件事之间时间不冲突,其余无要求。
什么都不会的渣渣瑟瑟发抖。。
附上队友代码:
#include<bits/stdc++.h> #define UP(i,l,h) for(int i=l;i<h;i++) #define DOWN(i,h,l) for(int i=h-1;i>=l;i--) #define W(t) while(t) #define MEM(a,b) memset(a,b,sizeof(a)) #define LL long long #define int LL #define INF 0x3f3f3f3f #define MAXN 20010 #define eps 1e-10 #define COUT(x) cout<<x<<endl using namespace std; const int MXLEN=1001000; struct Node{ int st,ed,h; bool operator < (const Node b) const{ return st==b.st?ed<b.ed:st<b.st; } }; Node nodes[MAXN]; int mx[MXLEN*4]; int lt,rt,v; void maintain(int o,int l,int r){ if(l<r){ mx[o]=max(mx[o*2],mx[o*2+1]); } } void update(int o,int l,int r){ if(l==r){ mx[o]=max(mx[o],v); }else{ int m=(l+r)/2; if(lt<=m) update(o*2,l,m); else update(o*2+1,m+1,r); } maintain(o,l,r); } int query(int o,int l,int r){ if(lt<=l&&rt>=r){ return mx[o]; }else{ int m=(l+r)/2; int ans=0; if(lt<=m) ans=max(query(o*2,l,m),ans); if(rt>m) ans=max(query(o*2+1,m+1,r),ans); return ans; } } main(){ int t; scanf("%lld",&t); int ks=1; W(t--){ MEM(mx,0); int n,m; scanf("%lld%lld",&n,&m); UP(i,0,m){ int t; scanf("%lld%lld%lld%lld",&t,&nodes[i].st,&nodes[i].ed,&nodes[i].h); } sort(nodes,nodes+m); UP(i,0,m){ // UP(j,0,nodes[i].st+1){ // mx[nodes[i].ed]=max(mx[nodes[i].ed],mx[j]+nodes[i].h); // } lt=1,rt=nodes[i].st+1; int big=query(1,1,MXLEN); v=big+nodes[i].h; lt=nodes[i].ed+1; update(1,1,MXLEN); } // int ans=0; // UP(i,0,MXLEN) ans=max(ans,mx[i]); lt=1,rt=MXLEN; printf("Case #%lld: %lld\n",ks++,query(1,1,MXLEN)); } }
相关文章推荐
- UVALive - 7711 The 2016 ACM-ICPC Asia Jakarta Regional Contest A - Confusing Date Format
- UVALive - 7720 The 2016 ACM-ICPC Asia Jakarta Regional Contest J - Super Sum
- UVALive - 7714 The 2016 ACM-ICPC Asia Jakarta Regional Contest D - Pay Day 脑洞+组合数学
- UVALive - 7715 The 2016 ACM-ICPC Asia Jakarta Regional Contest E - Guessing Game 繁琐的等差数列求和
- The 2014 ACM-ICPC Asia Shanghai Regional Contest - I - Defeat the Enemy (贪心+multiset)UVALive - 7146
- UVALive 7061 Dire Wolf (dp)(The 2014 ACM-ICPC Asia Beijing Regional Contest D)
- The 2016 ACM-ICPC Asia Dalian Regional Contest
- The 2016 ACM-ICPC Asia Tehran Regional Contest 部分题解!
- uva 7008 The 2014 ACM-ICPC Asia Mudanjiang Regional Contest 【部分题解】
- HDU 5953 Game of Taking Stones(威佐夫博弈+高精度+二分)——The 2016 ACM-ICPC Asia Dalian Regional Contest
- The 2016 ACM-ICPC Asia Dalian Regional Contest(汇总)
- 2016-2017 ACM-ICPC, NEERC, Moscow Subregional Contest K. Knights of the Old Republic kruskal
- HDU 4033 4036 4039 The 36th ACM/ICPC Asia Regional Chengdu Site —— Online Contest
- HDOJ 4293暨The 37th ACM/ICPC Asia Regional ChengDu Site Online Contest - F Groups
- The 2013 ACM-ICPC Asia Changsha Regional Contest - A
- 2016-2017 ACM-ICPC, Asia Tsukuba Regional Contest
- 「备战PKUWC2018」The 2017 ACM-ICPC Asia Shenyang Regional Contest 「HDU6217-6229」
- JAG Practice Contest for ACM-ICPC Asia Regional 2016B题【BFS】
- HDU3718/ZOJ3425 Similarity(The 2010 ACM-ICPC Asia Chengdu Regional Contest,加权二分图的最优匹配)
- zoj 3418 || The 2010 ACM-ICPC Asia Chengdu Regional Contest - C Binary Number