题目:https://codeforces.com/gym/101908/problem/F

题意:给你n个舞台,每个舞台有很多个节目,每个节目有个开始时间,结束时间,价值,每个舞台至少出演过一个节目,所有舞台同一时刻只能一个舞台演节目,求怎么安排节目有最大价值

思路:首先舞台数只有10,而且我们必须访问每个舞台至少一次,很明显是个状态   1<<10 ,分别代表每个舞台现在演过节目没有,然后很明显我们还有有一个区间状态。

如果题目没有要求每个舞台必须演一次的话,很明显这个问题我们就可以直接按左端点排序,dp[end]=max(dp[1-begin]+val,dp[end]),我们记录下1-begin的最大值,pre,然后我们就能轻松求出来。这题多了每个舞台访问一次的要求其实是一样的道理,我们每次用pre数组更新出每个状态j的区间里面最大值

dp[i][j]   代表 前i个节目    状态j (舞台是否表演过的情况)

pre[j][k]     代表 状态j        1-k区间的最大值是多少

#include<bits/stdc++.h>
#define maxn 1100
#define mod 1000000007
using namespace std;
typedef long long ll;
struct sss{
int id,val;
int be,ed;
}a[];
int q[];
int dp[maxn][maxn];
int pre[maxn][maxn<<];
int n,m,num,len;
int cmp(struct sss x,struct sss y){
if(x.be==y.be) return x.ed<y.ed;
return x.be<y.be;
}
int main(){
scanf("%d",&n);
for(int i=;i<=n;i++){
scanf("%d",&m);
for(int j=;j<m;j++){
scanf("%d%d%d",&a[num].be,&a[num].ed,&a[num].val);
q[++len]=a[num].be;
q[++len]=a[num].ed;
a[num++].id=i;
}
}
sort(q+,q+len+);
len=unique(q+,q+len+)-q-;
sort(a,a+num,cmp);
int flag=;
int mx=-;
int dex=;
int M=(<<n)-;
for(int i=;i<num;i++){
a[i].be=lower_bound(q+,q+len+,a[i].be)-q;
a[i].ed=lower_bound(q+,q+len+,a[i].ed)-q;
while(dex<=a[i].be){
for(int j=;j<=M;j++){
pre[j][dex]=max(pre[j][dex],pre[j][dex-]);
}
dex++;
}
int t=<<a[i].id;
dp[i][t]=a[i].val;
pre[t][a[i].ed]=max(pre[t][a[i].ed],a[i].val);
for(int j=;j<=M;j++){
if(pre[j][a[i].be])
dp[i][j|t]=max(dp[i][j|t],pre[j][a[i].be]+a[i].val);
}
for(int j=;j<=M;j++){
if(dp[i][j]) pre[j][a[i].ed]=max(pre[j][a[i].ed],dp[i][j]);
}
mx=max(mx,dp[i][M]);
} if(mx==) mx=-;
printf("%d",mx);
return ;
}

2018-2019 ACM-ICPC Brazil Subregional Programming Contest F. Music Festival的更多相关文章

  1. (寒假GYM开黑)2018-2019 ACM-ICPC Brazil Subregional Programming Contest

    layout: post title: 2018-2019 ACM-ICPC Brazil Subregional Programming Contest author: "luowenta ...

  2. 2018-2019 ACM-ICPC Brazil Subregional Programming Contest PART (10/13)

    $$2018-2019 ACM-ICPC Brazil Subregional Programming Contest$$ \(A.Slackline\ Adventure\) \(B.Marbles ...

  3. 2019-2020 ACM-ICPC Brazil Subregional Programming Contest (11/13)

    \(2019-2020\ ACM-ICPC\ Brazil\ Subregional\ Programming\ Contest\) \(A.Artwork\) 并查集,把检测区域能在一起的检测器放在 ...

  4. ACM ICPC, JUST Collegiate Programming Contest (2018) Solution

    A:Zero Array 题意:两种操作, 1 p v  将第p个位置的值改成v  2  查询最少的操作数使得所有数都变为0  操作为可以从原序列中选一个非0的数使得所有非0的数减去它,并且所有数不能 ...

  5. ACM ICPC, Amman Collegiate Programming Contest (2018) Solution

    Solution A:Careful Thief 题意:给出n个区间,每个区间的每个位置的权值都是v,然后找长度为k的区间,使得这个区间的所有位置的权值加起来最大,输出最大权值, 所有区间不重叠 思路 ...

  6. 2018-2019 ACM-ICPC Brazil Subregional Programming Contest

    A:留坑 B:二维sg函数,特判边界情况 //#pragma GCC optimize(2) //#pragma GCC optimize(3) //#pragma GCC optimize(4) / ...

  7. Gym.101908 Brazil Subregional Programming Contest(寒假自训第六场)

    这几天睡眠时间都不太够,室友晚上太会折腾了,感觉有点累,所以昨天的题解也没写,看晚上能不能补起来. B . Marbles 题意:给定N组数(xi,yi),玩家轮流操作,每次玩家可以选择其中一组对其操 ...

  8. 2013-2014 ACM-ICPC Brazil Subregional Programming Contest 题解

    [题目链接] 这场比赛题面英文都好长... ... A - Zero or One 模拟. #include <bits/stdc++.h> using namespace std; in ...

  9. Codeforces Gym101473 A.Zero or One (2013-2014 ACM-ICPC Brazil Subregional Programming Contest)

    代码: #include<iostream> #include<cstring> #include<cstdio> #include<cmath> #i ...

随机推荐

  1. Java thread(3)

    线程间的调度策略 通常是选择优先级高的线程,但是若发生以下情况则终止线程的运行:    1 调用yield 让出对cpu的占用权. 2 调用sleep 3 线程由于I/O操作而受阻 4 更高优先级的线 ...

  2. [Linux] 020 RPM 包的命名原则与其依赖性

    1. RPM 包命名原则 例如:httpd-2.2.15-15.e16.centos.1.i686.rpm 字符 释义 httpd 软件包名 2.2.15 软件版本 15 软件发布的次数 e16.ce ...

  3. Spring切面编程之AOP

    AOP 是OOP 的延续,是Aspect Oriented Programming 的缩写,意思是面向切面编程.可以通过预编译方式和运行期动态代理实现在不修改源代码的情况下给程序动态统一添加功能的一种 ...

  4. ubuntu离线安装mysql

    一:ubuntu离线安装mysql 转载来源:https://blog.csdn.net/liuhuoxingkong/article/details/80696574 参考文章:https://ww ...

  5. CodeForces 711D Directed Roads (DFS找环+组合数)

    <题目链接> 题目大意: 给定一个$n$条边,$n$个点的图,每个点只有一条出边(初始状态),现在能够任意对图上的边进行翻转,问你能够使得该有向图不出先环的方案数有多少种. 解题分析: 很 ...

  6. sqlite查询语句

    搜索距现在六个月前的月份第一天日期: SELECT date('now','start of month','-6 month','0 day'); 搜索距现在六个月前的日期: SELECT date ...

  7. SharePoint创建web应用程序,提示密码不正确

    使用版本SharePoint2010: $username="domain\username"$newpassword="xxxxxxxx"stsadm -o ...

  8. rpmdeps - 生成 RPM 软件包依赖关系

    SYNOPSIS rpmdeps {-P|--provides} {-R|--requires} FILE ... DESCRIPTION rpmdeps 根据 FILE 参数集合,生成软件包依赖关系 ...

  9. resolver - 解析器(resolver) 配置文件

    总览 (SYNOPSIS) /etc/resolv.conf 描述 (DESCRIPTION) 解析器(resolver) 是 C 函数库 中 的 一组 例程, 用于 访问 Internet 域名系统 ...

  10. C++使用函数strcpy出现bug: 错误 C4996 'strcpy': This function or variable

    C++中使用函数strcpy时出现问题: 解决方案: 在文件开头添加语句: #pragma warning(disable:4996) done! 剑指offer: 第一题:赋值运算符函数 #incl ...