ZOJ 3941 Kpop Music Party 贪心
题目链接:
http://www.icpc.moe/onlinejudge/showProblem.do?problemCode=3941
题解:
先吧所给的区间合并,得到若干个独立的区间。
然后从左到右把所有的区间都铺满个,并且对每个独立的区间的最后一个点考虑放和不放两种情况(dfs做,总复杂度也就2^10),然后去所有答案里面最大的那个。
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
typedef long long LL; int n, k, m; struct Node {
LL l, r;
bool operator < (const Node& tmp) const {
return l < tmp.l || l == tmp.l&&r < tmp.r;
}
}arr[], nds[]; int tot; //pos表示当前已经覆盖到了pos-1的位置,从pos开始是还未覆盖的部分
void solve(LL pos, int cur, LL cnt, LL ret, LL &ans) {
if (cnt > m) return;
if (cur == tot || cnt == m) {
ans = max(ans, ret); return;
}
LL lef, len, sum;
if (pos <= nds[cur].r) {
lef = max(pos, nds[cur].l);
len = nds[cur].r - lef + ;
sum = len / k;
if (len%k) sum++;
if (cnt + sum>m) { ans = max(ans, ret + (m - cnt)*k); }
//最后一个点不放
solve(lef + k*sum, cur + , cnt + sum, ret + sum*k, ans);
//最后一个点放
solve(nds[cur].r + k, cur + , cnt + sum + , ret + nds[cur].r + k - lef, ans);
}
else {
//最后一个点不放
solve(pos, cur + , cnt, ret, ans);
//最后一个点放
solve(max(pos, nds[cur].r + k), cur + , cnt + , ret + max((LL), nds[cur].r + k - pos), ans);
}
} int main() {
int tc;
scanf("%d", &tc);
while (tc--) {
tot = ;
scanf("%d%d%d", &n, &k, &m);
for (int i = ; i < n; i++) {
scanf("%lld%lld", &arr[i].l, &arr[i].r);
}
sort(arr, arr + n);
//合并区间
for (int i = ; i < n; i++) {
if (tot == ) {
nds[tot++] = arr[i];
}
else {
if (arr[i].l <= nds[tot - ].r) {
nds[tot - ].r = max(nds[tot - ].r, arr[i].r);
}
else {
nds[tot++] = arr[i];
}
}
}
LL ans = ;
solve(, , , , ans);
printf("%lld\n", ans);
}
return ;
}
ZOJ 3941 Kpop Music Party 贪心的更多相关文章
- ZOJ 3941 Kpop Music Party(省赛, 贪心)
Kpop Music Party Time Limit: 2 Seconds Memory Limit: 65536 KB Marjar University often hosts Kpo ...
- ZOJ 3941 Kpop Music Party
先把能合并的区间都合并起来. 考虑最裸的贪心策略,从左到右一段一段的取. 但是,这样会有错,错在没有考虑每段区间选取最后一个点. 因为N只有10,所以枚举一下哪些区间最后一个点会被选择,然后按照最裸的 ...
- ZOJ 3699 Dakar Rally(贪心)
这是一道贪心题,他的贪心思想很容易想明白,我们保证油箱里的油始终是最便宜的我们最后的花费就能是最少的.实现方法就是:比如现在在i点,我们看邮箱满载能最远到达哪里,不妨设最远到达j,(j >= i ...
- ZOJ 2002 Copying Books 二分 贪心
传送门:Zoj2002 题目大意:从左到右把一排数字k分,得到最小化最大份,如果有多组解,左边的尽量小. 思路:贪心+二分(参考青蛙过河). 方向:从右向左. 注意:有可能最小化时不够k分.如 ...
- ZOJ 3607 Lazier Salesgirl(贪心)
题目:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3607 题意:一个卖面包的小姑娘,给第i个来买面包的人的价格是pi, ...
- ZOJ 2968 Difference Game 【贪心 + 二分】
题意: 有Ga.Gb两堆数字,初始时两堆数量相同.从一一堆中移一一个数字到另一一堆的花费定义为两堆之间数 量差的绝对值,初始时共有钱C.求移动后Ga的最小小值减Gb的最大大值可能的最大大值. 思路: ...
- ZOJ 3829 Known Notation(贪心)题解
题意:给一串字符,问你最少几步能变成后缀表达式.后缀表达式定义为,1 * 1 = 1 1 *,题目所给出的字串不带空格.你可以进行两种操作:加数字,交换任意两个字符. 思路:(不)显然,最终结果数字比 ...
- ZOJ - 3829 Known Notation(模拟+贪心)
http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3829 给定一个字符串(只包含数字和星号)可以在字符串的任意位置添加一个数字 ...
- ZOJ - 3987 - Numbers (大数 + 贪心)
参考自:https://blog.csdn.net/u013534123/article/details/78484494 题意: 给出两个数字n,m,把n分成m份,使得以下最小 思路: 或运算只有0 ...
随机推荐
- jquery.form.js实现将form提交转为ajax方式提交的使用方法
本文实例讲述了jquery.form.js实现将form提交转为ajax方式提交的方法.分享给大家供大家参考.具体分析如下: 这个框架集合form提交.验证.上传的功能. 这个框架必须和jquery完 ...
- iOS网络通讯——监测网络状态:Reachability(可达性)
1.iOS平台是按照一直有网络连接的思路来设计的,开发者利用这一特点创造了很多优秀的第三方应用.大多数的iOS应用都需要联网,甚至有些应用严重依赖网络,没有网络就无法正常工作. 2.在你的应用尝试通过 ...
- 删除linux系统服务
#删除服务的命令,[ServiceName]需要替换为实际的服务名称 sudo update-rc.d [ServiceName] remove 有时候安装sysv-rc-conf进行服务控制,但是在 ...
- phpMyAdmin安装
phpMyAdmin是MySql的一个Web操作界面. phpMyAdmin官网貌似被和谐了,经常无法访问.不过我们可以从GitHub下载phpMyAdmin. 然后解压,搭建与普通的PHP网站一样. ...
- 在xml中添加array
在values建立arrays(名字可自定义)的xml: <?xml version="1.0" encoding="utf-8"?> <re ...
- Source not found The JAR file …has no source attachment.
问题描述如下: 解决方案: 选中你的项目方案,然后鼠标右键选择属性Properties,如下图: 然后依次按下图操作就完成了.
- Delphi CxGrid 汇总(3)
列 解决: <aColumn>.GroupIndex := -1; <aColumn>.Visible := True; *** ...
- VM虚拟机无法拖拽、粘贴、复制
VM无法从客户机拖放/复制文件到虚拟机的解决办法: 将这两项取消勾选,点击[确定].再次打开,勾选,点击[确定] 原因分析:可能是VM中默认是不支持该功能的,但是在配置窗体上确实默认打钩打上的. 依据 ...
- .Net 自己写个简单的 半 ORM (练手)
ORM 大家都知道, .Net 是EF 还有一些其他的ORM 从JAVA 中移植过来的 有 , 大神自己写的也有 不管ORM 提供什么附加的 乱七八糟的功能 但是 最主要的 还是 关系映射 的事情 ...
- 8.css边框
其实,与其将css盒模型称为是一个盒子,我更愿意将其称为卡片,或者是图画.因为相对于盒子的三维特效,网页的元素更像是二维的图画.而我们之间对元素尺寸之类的调整,更像是对画布的调整. 但是,就像我可以为 ...