飞翔

题意 : 给定一个区间长度 n ,接下来给出 m 个子区间,要求最少选出多少个区间才能使得 1~n 这个区间被所选的所有子区间覆盖

分析:

首先是动态规划,dp[i]表示把最大值从1位置搞到第i个小装置结尾最少需要多少个小装置,这样的话,从小到大遍历所有装置,每次查询当前装置之前的装置区间和当前装置相交的装置,更新dp就可以了。

那么问题就来了,装置有m个,这样O(m^2)的算法绝壁TLE。

用线段树来维护区间最小dp值信息,每个点维护ll到rr范围内的dp最小是多少。没算完一个新的小装置只需把它的dp值插到树上就行了。

然后TLE了,这里有个小贪心,每次更新不需要更新区间信息,因为对每个区间,r点之前的信息对更新之后的装置dp没有贡献,因为要努力使最大值向右移,因此单点更新即可。

AC代码:

#include <cstdio>
#include <algorithm>
#include <string.h>
using namespace std;
#define lson l , m , rt << 1
#define rson m + 1 , r , rt << 1 | 1
const int maxn = 5e4 + 10;
const int INF = 0x3f3f3f3f;
int minx[maxn<<2];
int dp[maxn];
int L[500010], R[500010];void PushUP(int rt) { minx[rt] = min(minx[rt<<1], minx[rt<<1|1]); }
void build(int l,int r,int rt) {if (l == r) {minx[rt] = INF;return ;}int m = (l+r)>>1;build(lson);build(rson);PushUP(rt);
}
void update(int p,int sc,int l,int r,int rt) {//单点更新,参数(更新点,更新值,总区间左端点,总区间右端点,根节点编号)if (l == r) {minx[rt] = sc;return ;}int m =(l+r)>>1;if (p <= m) update(p , sc , lson);else update(p , sc , rson);PushUP(rt);
}int query(int L,int R,int l,int r,int rt) {//查询最大值的写法、最小值同理、求和区间写法在下面if (L <= l && r <= R)return minx[rt];int m = (l + r) >> 1;int ret = INF;if (L <= m) ret = min(ret , query(L , R , lson));if (R > m) ret = min(ret , query(L , R , rson));return ret;}int main(void)
{int m, n;scanf("%d %d", &n, &m);for(int i=1; i<=m; i++)scanf("%d %d", &L[i], &R[i]);build(1, n, 1);for(int i=1; i<=n; i++)dp[i] = INF;dp[1] = 0;update(1, 0, 1, n, 1);for(int i=1; i<=m; i++){int val = query(L[i], R[i], 1, n, 1) + 1;if(val < dp[R[i]]){//printf("%d %d\n", L[i], R[i]);update(R[i], val, 1, n, 1);dp[R[i]] = val;}}printf("%d\n", dp[n]);return 0;
}

View Code

转载于:https://www.cnblogs.com/shuaihui520/p/9102836.html

POJ1769(线段树+DP)相关推荐

  1. P1295 [TJOI2011]书架(线段树dp)

    P1295 [TJOI2011]书架(线段树dp) 我好菜 先考虑普通dp: d p i = m i n ( d p j + m a x ( h j + 1 , h j + 2 - , h i ) ) ...

  2. HDU 3016 Man Down (线段树+dp)

    HDU 3016 Man Down (线段树+dp) Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Ja ...

  3. poj1769 线段树优化的dp

    附上这道题的链接:http://poj.org/problem?id=1769 题目的意思是有一个装置可以输出n个数的最大值, 这个装置由m个排序器组成, 每个排序器可以将这n个数从s 到 t的数按照 ...

  4. CodeForces - 1557D Ezzat and Grid(线段树+dp)

    题目链接:点击查看 题目大意:给出 nnn 个 010101 串,现在问最少需要删掉多少个串,才能使得剩下的串拼起来是连通的 规定两个 010101 串是连通的,当且仅当存在至少一列,在两个串中都为 ...

  5. CodeForces - 487B Strip(线段树+dp+二分)

    题目链接:点击查看 题目大意:给出一个长度为 n 的序列,现在要求分成尽可能少的子段,且每个子段需要满足: 最大值与最小值的差值小于等于 s 子段长度大于等于 l 题目分析:dp[ i ] 代表的是前 ...

  6. Educational Codeforces Round 81 (Rated for Div. 2) E. Permutation Separation 线段树 + dp

    传送门 文章目录 题意: 思路: 题意: 给你一个打乱的排列,每个位置都各有一个价值,让你选择一个分界点,分成p1,p2,...,prp_1,p_2,...,p_rp1​,p2​,...,pr​和pr ...

  7. Atcoder 077E - guruguru(线段树+dp)

    题目链接:http://arc077.contest.atcoder.jp/tasks/arc077_c 分析:如果某条线段包含x,显然应该先按一下到x,再从x走,反之必然是直接走过去,很容易想到用d ...

  8. Codeforces 1398 F. Controversial Rounds —— 线段树+dp

    This way 题意: 给你一个字符串,有些位置是已知的,有些是未知的,从位置1开始,如果有连续的0或者1大于等于k个,那么就算一轮游戏,然后0,1重新计数.问你当k=1~n的时候,游戏轮数最多是多 ...

  9. HDU 6447 YJJ's Salesman(线段树+DP)

    YJJ's Salesman Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) T ...

最新文章

  1. [Android] 关于系统工具栏和全屏沉浸模式
  2. Entity Framework Core延期及弃用的特性
  3. Spring.NET教程(二十)——整合Quartz.NET(应用篇)
  4. php json to object,PHP JSON_FORCE_OBJECT函数实现强转对象
  5. php mysql bootstart_PHP MySQL 创建数据库
  6. Hibrenate实现根据实体类自动创建表或添加字段
  7. opencart配置United States Postal Service快递
  8. 百面机器学习—12.优化算法
  9. SpringBoot @Condition 注解
  10. Linux下挂载NTFS
  11. Cocos2dx ParticleEditor粒子编辑器
  12. sql server 2000(迷你sql2000) jdbc驱动
  13. 曾经,我以为我很懂 MySQL 索引...
  14. 轮播图和导航栏:Vue和JavaScript分别实现
  15. 邮箱客户端程序的实现
  16. 现金的消亡与货币的未来之战 |链捕手
  17. PEGA(Low-Code App Builder)Describing a data object
  18. 华为计算机电话号码魔术,看完这6个操作,我终于相信华为手机真的有魔法!...
  19. 【JavaEE进阶系列 | 从小白到工程师】基本类型包装类的使用,装箱以及拆箱与parseInt方法
  20. 全网超详细的VMware虚拟机安装Kali Linux系统以及首次启动Kali Linux系统的注意事项

热门文章

  1. python局部变量函数_python函数局部变量用法实例分析
  2. 模型ks_风控建模 模型指标篇
  3. 用于he染色组织细胞核分割的两阶段U-Net算法
  4. 深度迁移学习在花生叶部病害图像识别中的应用
  5. java js倒计时_Java实现倒计时的方法详解
  6. 首个在线教学中文预训练模型TAL-EduBERT
  7. 知识图谱入门 , 知识抽取
  8. 递归算法1加到100_「算法」北京大学算法基础—递归(1)
  9. mysql 5.5.29 winx64_【转载】MySQL 5.7.29详细下载安装配置教程winx64
  10. 11年写的一篇文章----智能终端安全现状及前景展望