DP————最小覆盖问题】的更多相关文章

原题:https://www.luogu.org/problem/P2279 题解转载自:https://www.luogu.org/blog/contributation/solution-p2279 思路 找最低没被覆盖到的点,并在它的祖父处设一个消防站.考虑到这个点的所有子孙后代都已经被覆盖了,因此这时覆盖祖父能盖到更多额外的点,并保证结果不会更差. 很多思路是用dfs或堆求取最低节点,实际上没必要,只要预处理出深度(边输入边处理)并排序,碰到已覆盖就跳过,未覆盖就在祖父处设消防站,ans…
#include<iostream> #include<cstdio> #include<cstring> #include<algorithm> #include<queue> #include<vector> using namespace std; // push_back inline int read(){ ,x=; char ch=getchar(); '){ if(ch=='-') x=; ch=getchar(); }…
testC 输入文件: testC.in 输出文件testC.out 时限1000ms 问题描述: ,⋯,an. ,a2,a3,⋯,an) ,⋯,alm. ,al2,al3,⋯,alm) 现要求G=g,问最多能删除多少数? 输入描述: ,⋯,an. 输出描述: 输出只有一个数,表示最多能删除多少数. 样例输入: 4 6 8 样例输出: 考场上一直在想网络流的做法,当时想出了一个转换二分图最小支配集的建图方式,而自己sb地把支配集与覆盖集搞混了: 最小支配集表示选取一个点集,使图上的所有点属于这个…
最小覆盖(cover)..线段树 [题目描述] 给定 N 个区间[Li,Ri],需要你按照顺序选出一个区间序列使得[1,M]完全被覆盖.并且在选出来的序列中,某个区间[a,b]之前必须保证[1,a]都被已经选中的区间覆盖(即没有"断开"的地方).求出最少需要选多少区间 [输入文件] 第一行两个整数 M 和 N. 以下 N 行每行两个正整数 Li,Ri 表示这个区间. [输出文件] 一个整数,表示最少的区间数. [样例输入] 40 6 20 30 1 10 10 20 20 30 15…
动态dp初探 动态区间最大子段和问题 给出长度为\(n\)的序列和\(m\)次操作,每次修改一个元素的值或查询区间的最大字段和(SP1714 GSS3). 设\(f[i]\)为以下标\(i\)结尾的最大子段和,\(g[i]\)表示从起始位置到\(i\)以内的最大子段和. \[ f[i]=\max(f[i-1]+a[i],a[i])\\g[i]=\max(g[i-1],f[i]) \] 定义如下的矩阵乘法,显然这满足乘法结合律和分配律. \[ C=AB\\C[i,j]=\max_{k}(A[i,k…
题目大意:给定一个长度为 N 的序列,求带权区间最小覆盖. 题解:设 \(dp[i]\) 表示从左端点到 i 的最小权值是多少,则状态转移为:\(dp[e[i].ed]=min\{dp[j],j\in[e[i].st-1,e[i].ed-1] \}\),初始化 \(dp[st-1]=0\) 即可.因此,这里用线段树来维护区间最小值即可.不过这道题需要注意的点有很多,首先开始区间的下标从 0 开始,因此需要注意避免下标为负数的情况,我采用了所有坐标加 1 的写法,结尾要注意所给区间排序之后末尾可能…
颓了差不多一周后,决定重开DP 这一周,怎么说,学了学trie树,学了学二叉堆,又学了学树状数组,差不多就这样,然后和cdc一番交流后发现,学这么多有用吗?noip的范围不就是提高篇向外扩展一下,现在向下推进度,该不会写题还是不会,水平能有什么提高,应该老老实实看完DP的所有内容和图论的基本内容,再学学数学,写写oj的题,大概暑假前就干这个吧,累的时候可以去看看莫队和CDQ 然后宣布现在DP内容记录在本章 环形与后效性的处理 例题*1 poj2228 题意:将一天分为N小时,每小时都有一个价值w…
[题目链接] http://poj.org/problem?id=2836 [题目大意] 给出二维平面的一些点,现在用一些非零矩阵把它们都包起来, 要求这些矩阵的面积和最小,求这个面积和 [题解] 我们计算出以每两个点为矩形顶点所构成的矩形面积和包含的点子集, 然后对这些子集进行状态DP,求全集的最小覆盖 [代码] #include <cstdio> #include <algorithm> #include <vector> #include <cstring&…
题目链接:https://vjudge.net/problem/CSU-1531 Input Output Sample Input 2 1 5 3 0.2 1.5 0.3 4.8 0.4 3.5 4 4 8 0.7 0.5 1.7 0.5 2.8 1.5 3.7 0.5 2.2 3.6 2.7 2.7 1.2 2.2 1.2 2.7 Sample Output 1 3 题解: 一开始想用DP做,后来发现不行,因为新加入的点会破坏前面的结果,且不知道前面的状态如何,所以不能用动态规划的思想去解题…
一看到这道题就知道是树形dp 之前做过类似的题,只不过保护的范围是1 所以简单很多. 这道题保护的范围是2,就复杂了很多. 我就开始列状态,然后发现竟然有5种 然后我就开始列方程. 但是我考虑的时候是用一条链去思考的. 显然应该要用深度为3的完全二叉树去思考. 所以我写到一半发现自己的方程有问题. 然后就干脆放弃了,因为思维量好大. 然后去看题解.发现我完成了正解的三分之一. 后面的方程写出之后还需要很牛逼的简化. 我花了很长时间才理解. 自己还是太菜了.http://www.cnblogs.c…