题目描述
听说彩虹有七种颜色?
一维坐标轴上n条线段,每条线段左端点l,右端点r,颜色为c,从中选m种颜色的互不接触的线段,每种颜色可选多条,所选线段的总长度最长为多少?
输入描述:

第一行2个整数 n, m;
接下来n行,每行3个整数l, r, c。

输出描述:

一个整数,表示所选线段的最长的总长度;若选不了,输出-1;

示例1
输入
复制

4 2
1 3 1
4 5 1
5 8 2
7 9 3

输出
复制

5

示例2
输入
复制

4 3
1 3 1
4 5 1
5 8 2
7 9 3

输出
复制

-1

备注:

1 <= n <= 100000; 1 <= m <= 7;
1 <= l < r <= 1000000000; 1 <= c <= 7;

题意 : 在一维平面上给你 n 条线段,每条线段都有一个颜色,你可以在其中选出任意条线段,但任意两条均不能相交,且颜色数应恰好等于 m, 问你可以选取的最大长度是多少

思路分析 :观察发现颜色数 <= 7, 因此比较容易想到装压 dp,定义 dp[i][j] 表示到 i 条线段时,此时状态为 j 的最大长度

      显然根据这个可以去递推 dp[i][j|(1<<(arr[i].c-1))] = max(dp[i][j|(1<<(arr[i].c-1))], dp[pos][j]+arr[i].r-arr[i].l)

      最后再数一下状态中 1 的个数刚好等于 m 的即可

代码示例 :

#define ll long long
const ll maxn = 2e5+5; ll n, m;
struct node
{
ll l, r, c;
bool operator< (const node& v)const{
return r < v.r;
}
}arr[maxn];
vector<ll>ve;
ll dp[maxn][150];
ll bitnum[150]; void init(){
bitnum[0] = 0; for(ll i = 1; i <= 130; i++) bitnum[i] = 1+bitnum[i&(i-1)];
} void solve(){
memset(dp, -1, sizeof(dp));
dp[0][0] = 0;
ll ans = -1; for(ll i = 1; i <= n; i++){
for(ll j = 0; j < 128; j++){
dp[i][j] = max(dp[i-1][j], dp[i][j]);
ll pos = upper_bound(ve.begin(), ve.end(), arr[i].l-1)-ve.begin();
if(dp[pos][j] != -1) {
dp[i][j|(1<<(arr[i].c-1))] = max(dp[i][j|(1<<(arr[i].c-1))], dp[pos][j]+arr[i].r-arr[i].l);
}
if (bitnum[j] == m) ans = max(ans, dp[i][j]);
}
}
printf("%lld\n", ans);
} int main() {
init(); cin >> n >> m;
for(ll i = 1; i <= n; i++){
scanf("%lld%lld%lld", &arr[i].l, &arr[i].r, &arr[i].c);
}
sort(arr+1, arr+1+n);
for(ll i = 1; i <= n; i++) ve.push_back(arr[i].r);
solve(); return 0;
}

七彩线段 - 装压dp (牛客网)的更多相关文章

  1. 线段树优化dp——牛客多校第一场I(好题)

    和两天做了两道数据结构优化dp的题,套路还是差不多的 题解链接! https://www.cnblogs.com/kls123/p/11221471.html 一些补充 其实这道题的dp[i]维护的不 ...

  2. 牛客网 桂林电子科技大学第三届ACM程序设计竞赛 G.路径-带条件的树的直径变形-边权最大,边数偶数的树上的最长路径-树形dp

    链接:https://ac.nowcoder.com/acm/contest/558/G 来源:牛客网 路径 小猫在研究树. 小猫在研究路径. 给定一棵N个点的树,每条边有边权,请你求出最长的一条路径 ...

  3. 牛客网暑期ACM多校训练营(第一场) - J Different Integers(线段数组or莫队)

    链接:https://www.nowcoder.com/acm/contest/139/J来源:牛客网 时间限制:C/C++ 2秒,其他语言4秒 空间限制:C/C++ 524288K,其他语言1048 ...

  4. 牛客网 牛客练习赛11 A.假的线段树

    看不懂题意,而且太菜,写了两道就溜了... A.假的线段树 链接:https://www.nowcoder.com/acm/contest/59/A来源:牛客网 时间限制:C/C++ 1秒,其他语言2 ...

  5. 牛客网暑期ACM多校训练营(第二场) 题解 A run 递推 dp

    链接:https://www.nowcoder.com/acm/contest/140/A来源:牛客网 White Cloud is exercising in the playground. Whi ...

  6. 栈的压入、弹出顺序 牛客网 剑指Offer

    栈的压入.弹出顺序 牛客网 剑指Offer 题目描述 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否可能为该栈的弹出顺序.假设压入栈的所有数字均不相等.例如序列1,2,3,4,5是 ...

  7. 牛客网-湘潭大学校赛重现H题 (线段树 染色问题)

    链接:https://www.nowcoder.com/acm/contest/105/H来源:牛客网 n个桶按顺序排列,我们用1~n给桶标号.有两种操作: 1 l r c 区间[l,r]中的每个桶中 ...

  8. 牛客网练习赛26B(简单的dp)

    题目链接:https://www.nowcoder.com/acm/contest/180/B 链接:https://www.nowcoder.com/acm/contest/180/B来源:牛客网 ...

  9. 2018 牛客网暑期ACM多校训练营(第一场) E Removal (DP)

    Removal 链接:https://ac.nowcoder.com/acm/contest/139/E来源:牛客网 题目描述 Bobo has a sequence of integers s1, ...

随机推荐

  1. Python--day41--线程队列

    1,普通队列:queue.Queue(),先进先出 import queue q = queue.Queue() #队列 先进先出 q.put(1) q.put(2) q.put(3) q.put(4 ...

  2. 【b704 && BZOJ 1999】树网的核

    [题目链接]:http://noi.qz5z.com/viewtask.asp?id=b704 &&http://www.lydsy.com/JudgeOnline/problem.p ...

  3. UVa1601 - The Morning after Halloween [单向bfs]

    解题思路: 1.注意到2*2方格中必有一个#,那么最多只有192条通道,可以将所有非‘#’的位置提取出来用邻接表的方式建图,通过bfs搜索目标位置. 2.将三个ghost的位置(a,b,c)作为状态量 ...

  4. H3C 查看设备路由表

  5. Python3装饰器的使用

    装饰器 简易装饰器模板 def wrapper(func): def inner(*args,**kwargs): print('主代码前添加的功能') ret=func(*args,**kwargs ...

  6. Linux内核 结构 struct urb

    struct urb 结构中和 USB 设备驱动有关的成员是: struct usb_device *dev 指向这个 urb 要发送到的 struct usb_device 的指针. 这个变量必须被 ...

  7. PDF.JS 读取文件流前端展示 C#

    最近再搞PDF得展示问题,因为aspose.pdf成本太高,只能使用pdf.js这个开源强大的前端东东了. 在百度了很久后 网上大都是node,java,php的事例,有位大哥的是C#的后台代码按他写 ...

  8. nixyx —— 一个小巧的项目工程/编译文件生成器(构建系统?)

    恩..nixyx确实算不上是一个构建系统. 所谓构建系统,比如GNU的Autotools,那是一套很完整的构建体系,包括了程序的配置,编译和安装三大部分. 类似的软件还有:google的gyp.腾讯的 ...

  9. Android1_运行第一个AS项目HelloWorld

    一.开发安卓程序需要具备一些开发工具,这里简单罗列一下: JDK :这是Java语言的开发工具包,包含了Java的运行环境.工具集合.基础类库等内容. Android Studio:目前主流的安卓开发 ...

  10. .NETCore3.1中的Json互操作最全解读-收藏级

    前言 本文比较长,我建议大家先点赞.收藏后慢慢阅读,点赞再看,形成习惯! 我很高兴,.NETCore终于来到了3.1LTS版本,并且将支持3年,我们也准备让部分业务迁移到3.1上面,不过很快我们就遇到 ...