2015-2016 Northwestern European Regional Contest (NWERC 2015)

F H没做

似乎只有 B 题有点意思

D:数论分块枚举所有上取整区间,只需要对于所有下取整的区间,取在右端点处的上取整的值即可。这些值是所有上取整区间的左端点。

B

题意:有 n 个区间,分成 p 组,每组的权值是所有区间交的长度,交不能是 0 。求权值和最大。保证有解。 \(n,p \le 200\)

key:思路,dp

对于每一组,限制区间交的长度的区间至多是 2 个(认为 {[1,3],[2,4],[2,3]} 只有 [2,3] 限制)。考虑一个分组方案,定义这种区间是好的,其他区间(即不限制它所在组的权值)是坏的。

显然为了使权值最大,每个区间都趋向于成为坏的。

  1. 限制该组权值的区间只有 1 个。此时其他区间一定都包含它。
  2. 限制该组权值的区间有 2 个。取其中一个为 a,那么 a 一定不包含任何其它区间,因为如果它包含其它区间,那么它可以分配到它包含的某个区间所对应的组,成为一个坏的,此时会使答案更大。

所以对于一个包含其它区间的区间,它要么被分配到它包含的某个区间的组内(此时不影响答案),要么单独成为一组(成为第一类),所以可以按这个性质进行分类。

具体地说,先把给定的 n 个区间划分为两类:如果该区间不包含任何其它区间,分到 A 类。否则分到 B 类。

A 类中的区间没有包含关系,所以排序后的分组一定是一段段区间,这个可以 DP (甚至因为决策单调性可以做到 \(O(n^2)\))

B 类中的区间要么单独成组,要么不影响答案,所以只需要排序取长度前若干大即可。

#include<bits/stdc++.h>
using namespace std; typedef long long LL;
typedef long double LD;
typedef pair<int,int> pii;
typedef pair<LL,int> pli;
const int SZ = 1e6 + 10;
const int INF = 1e9 + 10;
const int mod = 1e9 + 7;
const LD eps = 1e-8; LL read() {
LL n = 0;
char a = getchar();
bool flag = 0;
while(a > '9' || a < '0') { if(a == '-') flag = 1; a = getchar(); }
while(a <= '9' && a >= '0') { n = n * 10 + a - '0',a = getchar(); }
if(flag) n = -n;
return n;
} struct haha {
int l,r;
}a[SZ]; bool cmplen(haha a,haha b) { return a.r-a.l < b.r-b.l; }
bool cmplen2(haha a,haha b) { return a.r-a.l > b.r-b.l; }
bool cmpl(haha a,haha b) { return a.l < b.l; } vector<haha> A,B;
/// A: 没包含任何 int f[210][210]; int main() {
int n = read(),p = read();
for(int i = 1;i <= n;i ++) {
a[i].l = read();
a[i].r = read();
}
sort(a+1,a+1+n,cmplen);
for(int i = 1;i <= n;i ++) {
bool flag = 0;
for(haha p : A) {
if(a[i].l <= p.l && p.r <= a[i].r) {
flag = 1; break;
}
}
if(!flag) A.push_back(a[i]);
else B.push_back(a[i]);
}
sort(A.begin(),A.end(),cmpl);
for(int i = 0;i <= A.size();i ++)
for(int j = 0;j <= p;j ++)
f[i][j] = -INF;
f[0][0] = 0;
for(int k = 1;k <= p;k ++) {
for(int i = 1;i <= A.size();i ++) {
int l = A[i-1].l;
int r = A[i-1].r;
for(int j = i-1;j >= 0;j --) {
if(l>=r) break;
f[i][k] = max(f[i][k],f[j][k-1] + r-l);
if(j) l = max(l,A[j-1].l),r = min(r,A[j-1].r);
}
}
}
sort(B.begin(),B.end(),cmplen2);
LL ans = f[A.size()][p],sum = 0;
for(int i = 0;i < min((int)B.size(),p);i ++) {
sum += B[i].r-B[i].l;
ans = max(ans,sum+f[A.size()][p-i-1]);
}
cout << ans << endl;
}

NWERC 2015的更多相关文章

  1. Gym101485: NWERC 2015(队内第6次训练)

    A .Assigning Workstations 题意:给定N个人的工作时间和工作时长,我们可以假设有无数台工作机器,如果一台机器超过M时间未使用就会关闭,那么我们怎么安排机器的使用,使得需要开启机 ...

  2. 2015-2016 Northwestern European Regional Contest (NWERC 2015)

    训练时间:2019-04-05 一场读错三个题,队友恨不得手刃了我这个坑B. A I J 简单,不写了. C - Cleaning Pipes (Gym - 101485C) 对于有公共点的管道建边, ...

  3. codeforces Gym - 101485 D Debugging (2015-2016 Northwestern European Regional Contest (NWERC 2015))

    题目描述: 点击打开链接 这题题意其实很不好理解,你有一个n行的程序,现在程序运行了r时间之后停止了运行,证明此处有一个bug,现在你需要在程序中加printf来调试找到bug所在的位置,你每次加一个 ...

  4. 2015 西雅图微软总部MVP峰会记录

    2015 西雅图微软总部MVP峰会记录 今年决定参加微软MVP全球峰会,在出发之前本人就已经写这篇博客,希望将本次会议原汁原味奉献给大家 因为这次是本人第一次写会议记录,写得不好的地方希望各位园友见谅 ...

  5. 使用Visual Studio 2015 开发ASP.NET MVC 5 项目部署到Mono/Jexus

    最新的Mono 4.4已经支持运行asp.net mvc5项目,有的同学听了这句话就兴高采烈的拿起Visual Studio 2015创建了一个mvc 5的项目,然后部署到Mono上,浏览下发现一堆错 ...

  6. TFS 2015 敏捷开发实践 – 在Kanban上运行一个Sprint

    前言:在 上一篇 TFS2015敏捷开发实践 中,我们给大家介绍了TFS2015中看板的基本使用和功能,这一篇中我们来看一个具体的场景,如何使用看板来运行一个sprint.Sprint是Scrum对迭 ...

  7. TFS 2015 敏捷开发实践 – 看板的使用

    看板在现代应用开发过程中使用非常广泛,不管是使用传统的瀑布式开发还是敏捷开发,都可以使用看板管理.因为看板拥有简单的管理方法,直观的显示方式,所以很多软件开发团队选择使用看板进行软件开发管理.本文不在 ...

  8. Microsoft Visual Studio 2015 下载、注册、安装过程、功能列表、问题解决

    PS:请看看回复.可能会有文章里没有提到的问题.也许会对你有帮助哦~ 先上一张最终的截图吧: VS2015正式版出了,虽然没有Ultimate旗舰版,不过也是好激动的说.哈哈.可能有的小伙伴,由于工作 ...

  9. 一年之计在于春,2015开篇:PDF.NET SOD Ver 5.1完全开源

    前言: 自从我2014年下半年到现在的某电商公司工作后,工作太忙,一直没有写过一篇博客,甚至连14年股票市场的牛市都错过了,现在马上要过年了,而今天又是立春节气,如果再不动手,那么明年这个无春的年,也 ...

随机推荐

  1. 【转】selenium技巧 - 通过js来控制滚动条,通过xpath定位最上层的div层

    http://blog.csdn.net/iceryan/article/details/8162703 业务流程:   1.打开此网页 http://nanjing.xiaomishu.com/sh ...

  2. c++程序—输入

    #include<iostream> using namespace std; #include<string> int main() { string str = " ...

  3. silicon射频发射器 SI4010-C2-GSR

    Si4010是第一款系统级的自动天线调谐发射器,具有专利的调谐电路,可自动微调天线以达到最佳效果,以及恒定的输出功耗.PCB环形天线的制造公差和环境改变,将会引起发射频率的变化,从而可能导致天线的效率 ...

  4. 【LeetCode】最长公共子序列

    [问题]给定两个字符串A和B,长度分别为m和n,要求找出它们最长的公共子串,并返回其长度.例如:A = "HelloWorld"B = "loop"则A与B的最 ...

  5. ContentProvider ContentResolver ContentObserver 内容:提供、访问、监听

    内容提供 public class PersonContentProvider extends ContentProvider{ private static final String AUTHORI ...

  6. poj_3461 KMP算法解析

    A - Oulipo Time Limit:1000MS     Memory Limit:65536KB     64bit IO Format:%I64d & %I64u Submit S ...

  7. Map—数据结构

    map是数据结构的一种,map总是以key-value的形式保存数据的, 根据key来查找value的值,但是key的值是唯一的,在同一个map中不能重复. 常用的实现类java.util.hashM ...

  8. Java四类八种

    四类: 整数类型,浮点类型,字符型,布尔型 八种: byte,short,int,long,float,double,char,boolean

  9. Java多线程通讯---------wait,notify区别

    class Res{ public String username; public String sex; } class Out extends Thread{ Res res; public Ou ...

  10. c#中的Task异步编程

    https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/concepts/async/index翻译 1. 引入 Task异步 ...