【题解】Music Festival(树状数组优化dp)
【题解】Music Festival(树状数组优化dp)
题意:有\(n\)种节目,每种节目有起始时间和结束时间和权值。同一时刻只能看一个节目(边界不算),在所有种类都看过至少一遍的情况下最大收益
设\(dp(s,i)\)表示已经看过\(s\)集合中的节目,且看过的节目的结束时间是\(i\)的最大收益。
转移:
\]
由于\(O(m^3)\)不能过1000,但可以看到转移是一段前缀,所以直接树状数组优化就好。
注意转移的顺序,可以发现\(r\)可以作为转移状态。可能会有r相同的情况,但不影响答案。
复杂度\(O(m^2\log m)\)
//@winlere
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;  typedef long long ll;
inline int qr(){
      register int ret=0,f=0;
      register char c=getchar();
      while(!isdigit(c))f|=c==45,c=getchar();
      while(isdigit(c)) ret=ret*10+c-48,c=getchar();
      return f?-ret:ret;
}
const int maxn=86405;
const int inf=0x3f3f3f3f;
int dp[1<<10|1][maxn];
struct E{
      int l,r,id,val;
      inline bool operator <(const E&a)const{return r<a.r;}
}e[1001];
int n,cnt,len;
inline int que(const int&pos,const int*a){
      int ret=-inf;
      for(int t=pos;t>0;t-=t&-t) ret=max(ret,a[t]);
      return ret;
}
inline void upd(const int&pos,const int&tag,int*a){
      for(int t=pos;t<=len;t+=t&-t) a[t]=max(a[t],tag);
}
int main(){
#ifndef ONLINE_JUDGE
      freopen("in.in","r",stdin);
      //freopen("out.out","w",stdout);
#endif
      n=qr();
      memset(dp,0xcc,sizeof dp);
      for(int t=1;t<=n;++t){
	    int m=qr();
	    for(int i=1,t1,t2,t3;i<=m;++i) t1=qr(),t2=qr(),t3=qr(),e[++cnt]={t1,t2,t,t3};
      }
      sort(e+1,e+cnt+1);
      len=e[cnt].r+1;
      memset(dp[0],0,sizeof dp[0]);
      for(int t=1;t<=cnt;++t){
	    for(int s=0;s<1<<n;++s){
		  if(s&(1<<e[t].id>>1)){
			int g=s^(1<<e[t].id>>1);
			int f=max(que(e[t].l,dp[s]),que(e[t].l,dp[g]))+e[t].val;
			upd(e[t].r,f,dp[s]);
		  }
	    }
      }
      int g=que(len,dp[(1<<n)-1]);
      cout<<max(g,-1)<<endl;
      return 0;
}
												
											【题解】Music Festival(树状数组优化dp)的更多相关文章
- 【题解】ARC101F Robots and Exits(DP转格路+树状数组优化DP)
		
[题解]ARC101F Robots and Exits(DP转格路+树状数组优化DP) 先删去所有只能进入一个洞的机器人,这对答案没有贡献 考虑一个机器人只能进入两个洞,且真正的限制条件是操作的前缀 ...
 - HDU 6240 Server(2017 CCPC哈尔滨站  K题,01分数规划 + 树状数组优化DP)
		
题目链接 2017 CCPC Harbin Problem K 题意 给定若干物品,每个物品可以覆盖一个区间.现在要覆盖区间$[1, t]$. 求选出来的物品的$\frac{∑a_{i}}{∑b_ ...
 - Codeforces 946G  Almost Increasing Array (树状数组优化DP)
		
题目链接 Educational Codeforces Round 39 Problem G 题意 给定一个序列,求把他变成Almost Increasing Array需要改变的最小元素个数. ...
 - LUOGU P2344 奶牛抗议 (树状数组优化dp)
		
传送门 解题思路 树状数组优化dp,f[i]表示前i个奶牛的分组的个数,那么很容易得出$f[i]=\sum\limits_{1\leq j\leq i}f[j-1]*(sum[i]\ge sum[j- ...
 - Codeforces 909C Python Indentation:树状数组优化dp
		
题目链接:http://codeforces.com/contest/909/problem/C 题意: Python是没有大括号来标明语句块的,而是用严格的缩进来体现. 现在有一种简化版的Pytho ...
 - BZOJ3594: [Scoi2014]方伯伯的玉米田【二维树状数组优化DP】
		
Description 方伯伯在自己的农田边散步,他突然发现田里的一排玉米非常的不美. 这排玉米一共有N株,它们的高度参差不齐. 方伯伯认为单调不下降序列很美,所以他决定先把一些玉米拔高,再把破坏美感 ...
 - Codeforces 629D Babaei and Birthday Cake(树状数组优化dp)
		
题意: 线段树做法 分析: 因为每次都是在当前位置的前缀区间查询最大值,所以可以直接用树状数组优化.比线段树快了12ms~ 代码: #include<cstdio> #include< ...
 - BZOJ 3594: [Scoi2014]方伯伯的玉米田 (二维树状数组优化DP)
		
分析 首先每次增加的区间一定是[i,n][i,n][i,n]的形式.因为如果选择[i,j](j<n)[i,j](j<n)[i,j](j<n)肯定不如把后面的全部一起加111更优. 那 ...
 - 4.9 省选模拟赛 划分序列 二分 结论 树状数组优化dp
		
显然发现可以二分. 对于n<=100暴力dp f[i][j]表示前i个数分成j段对于当前的答案是否可行. 可以发现这个dp是可以被优化的 sum[i]-sum[j]<=mid sum[i] ...
 
随机推荐
- @loj - 2090@ 「ZJOI2016」旅行者
			
目录 @description@ @solution@ @accepted code@ @details@ @description@ 小 Y 来到了一个新的城市旅行.她发现了这个城市的布局是网格状的 ...
 - asp.net如何判断网址能否打开
			
private void StatusDescription_Click(object sender, System.EventArgs e) { PageUrl = ...
 - TCP/IP网络编程 读书笔记1
			
本篇主干内容是TCP/IP网络编程1-9章学习笔记 1. linux文件描述符 描述符从3开始以由小到大的顺序编号,0,1,2,分配给标准I/O用作标准输入.标准输出和标准错误. 2. 协议族与套接字 ...
 - pytorch bert 源码解读
			
https://daiwk.github.io/posts/nlp-bert.html 目录 概述 BERT 模型架构 Input Representation Pre-training Tasks ...
 - python selenium处理iframe和弹框(一)
			
处理iframe和弹框 # encoding:utf-8 from selenium import webdriver import time driver = webdriver.Firefox() ...
 - HDU 4417  Super Mario 主席树查询区间小于某个值的个数
			
#include<iostream> #include<string.h> #include<algorithm> #include<stdio.h> ...
 - 【原生JS】评论编辑器 文本操作
			
效果图: HTML: <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> ...
 - 2001年NOIP普及组复赛题解
			
题目涉及算法: 数的计算:动态规划: 最大公约数和最小公倍数问题:质因数分解: 求先序排列:递归: 装箱问题:动态规划(纯0-1背包问题) 数的计算 题目链接:https://www.luogu.or ...
 - ThinkPHP3.2版本安全更新
			
近日我们收到了一个关于3.2版本的漏洞提醒,官方已经第一时间进行处理和更新.由于3.2版本已经过了官方的维护和安全更新周期,而且大量的开发者也进行了二次开发,因此不再发布新版,官方仅进行安全公告和修复 ...
 - poj 3624 Charm Bracelet(01背包)
			
Charm Bracelet Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 29295 Accepted: 13143 ...