题目大意:在[0,10000]上给出n个区间,要求在区间选整数点,每个区间至少包含两个点,问至少要几个点。题目保证有解决方案。

题目分析:

  我们做过在区间上至少包含一个点的题目。类似的方法,我们先排序后去掉区间包含的情况。接着我们贪心。对于第i个区间,取最后两个点,如果第i+1个区间包含这两个点,那么跳到第i+2个区间。如果第i+1个区间一个点也不包括,那么对于第i+1个区间取最后两个点。如果只包含一个点,那么在第i+1个区间取最后一个点,继续判断。

题目代码:

  

 #include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<queue>
#include<vector>
#include<algorithm>
using namespace std; struct edge{int to,w;}; int n;
vector <edge> g[];
int d[];
queue<int> que;
int maxx; void read(){
for(int i=;i<=;i++) g[i].clear();
maxx = -;
for(int i=;i<=n;i++){
int x,y; scanf("%d%d",&x,&y);
maxx = max(maxx,y+);
x++;y++;
edge ed;ed.to = y;ed.w = ;
g[x-].push_back(ed);
}
for(int i=;i<=maxx;i++){
edge ed;ed.to=i+;ed.w=;
g[i].push_back(ed);
ed.to=i;ed.w=-;
g[i+].push_back(ed);
}
} void work(){
for(int i=;i<=maxx;i++) d[i]=-;
que.push();
d[] = ;
while(!que.empty()){
int k = que.front();que.pop();
for(int i=;i<g[k].size();i++){
if(g[k][i].w+d[k] > d[g[k][i].to]){
d[g[k][i].to] = g[k][i].w + d[k];
que.push(g[k][i].to);
}
}
}
printf("%d\n",d[maxx]);
} int main(){
scanf("%d",&n);
read();
work();
return ;
}

思考:我们不妨对问题加以拓展。

  问题一:我们做过一个区间选一个点的题,做过一个区间选两个点的题。那么当一个区间选n个点时怎么去做?

  问题二:上面的区间选点数量都是相同的,当区间选点数量不同时怎么做?

解法:

  对于问题一:很容易就能想出拓展方法,每次对每个区间都选最后n个点,容易证明这是最优的。

  对于问题二:发现上面的贪心无法使用,需要另辟蹊径。不妨令s[i]表示前i个点被选的情况。那么有s[r]-s[l-1]>=c[i]。c[i]该区间应选点数。

        由于这里有很多个不等式,又要求最小化s[10000],容易思考到这可能是要用到线性规划去解决。

        接着我们打了一个单纯形法。

        

        收获了一个TLE。仔细想想就会发现问题并不是这么难。这里的不等式并不如线性规划里面的那么复杂。

        那么我们可以建图跑最长路。这就是答案。具体怎么建图可以参考网上其它人的博客。我不想再写下去了。

POJ1716 贪心的更多相关文章

  1. BZOJ 1692: [Usaco2007 Dec]队列变换 [后缀数组 贪心]

    1692: [Usaco2007 Dec]队列变换 Time Limit: 5 Sec  Memory Limit: 64 MBSubmit: 1383  Solved: 582[Submit][St ...

  2. HDOJ 1051. Wooden Sticks 贪心 结构体排序

    Wooden Sticks Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) To ...

  3. HDOJ 1009. Fat Mouse' Trade 贪心 结构体排序

    FatMouse' Trade Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) ...

  4. BZOJ 1691: [Usaco2007 Dec]挑剔的美食家 [treap 贪心]

    1691: [Usaco2007 Dec]挑剔的美食家 Time Limit: 5 Sec  Memory Limit: 64 MBSubmit: 786  Solved: 391[Submit][S ...

  5. 【Codeforces 738D】Sea Battle(贪心)

    http://codeforces.com/contest/738/problem/D Galya is playing one-dimensional Sea Battle on a 1 × n g ...

  6. 【BZOJ-4245】OR-XOR 按位贪心

    4245: [ONTAK2015]OR-XOR Time Limit: 10 Sec  Memory Limit: 256 MBSubmit: 486  Solved: 266[Submit][Sta ...

  7. code vs 1098 均分纸牌(贪心)

    1098 均分纸牌 2002年NOIP全国联赛提高组  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 黄金 Gold 题解   题目描述 Description 有 N 堆纸牌 ...

  8. 【BZOJ1623】 [Usaco2008 Open]Cow Cars 奶牛飞车 贪心

    SB贪心,一开始还想着用二分,看了眼黄学长的blog,发现自己SB了... 最小道路=已选取的奶牛/道路总数. #include <iostream> #include <cstdi ...

  9. 【贪心】HDU 1257

    HDU 1257 最少拦截系统 题意:中文题不解释. 思路:网上有说贪心有说DP,想法就是开一个数组存每个拦截系统当前最高能拦截的导弹高度.输入每个导弹高度的时候就开始处理,遍历每一个拦截系统,一旦最 ...

随机推荐

  1. CodeForces - 877C

    Slava plays his favorite game "Peace Lightning". Now he is flying a bomber on a very speci ...

  2. Django之ModelForm(一)

    要说ModelForm,那就先说Form吧! 先给出一个Form示例: models.py from django.db import models class UserType(models.Mod ...

  3. npm的常用命令

    npm install <name>安装nodejs的依赖包 例如npm install express 就会默认安装express的最新版本,也可以通过在后面加版本号的方式安装指定版本, ...

  4. python3学习笔记.3.条件控制与循环

    1.条件控制 关键字 if.elif.else 一般形式如下: if 条件1: 结果1 elif 条件2: 结果2 else: 结果3 注意:条件后的:语句的缩进的是相同的   2.循环语句 关键字有 ...

  5. xshell5破解版下载

    http://www.pc6.com/softview/SoftView_507840.html

  6. URAL题解二

    URAL题解二 URAL 1082 题目描述:输出程序的输入数据,使得程序输出"Beutiful Vasilisa" solution 一开始只看程序的核心部分,发现是求快排的比较 ...

  7. js基础练习(四)

    练习: 通过循环按行顺序为一个5×5的二维数组a赋1到25的自然数,然后输出该数组的左下半三角.试编程.    2   3   4   5 6   7   8   9   10 11 12 13 14 ...

  8. 不需要打密码的sudo方法

    Linux下频繁输入sudo很麻烦.如果你的账户已经是sudoer了,那么编辑/etc/sudoers,将 %sudo ALL=(ALL:ALL) ALL 修改为: %sudo ALL=(ALL) N ...

  9. (转载)Linux入门:操作目录和文件的命令

    PATH   每个用户的PATH都是不一样的: PATH中不包含“当前目录”: (1)echo $PATH:显示PATH环境变量: (2)PATH = "$PATH":/home/ ...

  10. float数据类型

    学习一门语言都要打好基础,前面的知识可能看着无聊,但是很重要,能够让我们打好坚实的基础,一定要掌握int.float.long.字符串.列表.元组.集合.字典.函数和类的基础常用的操作. 下面来看一看 ...