dp优化简单总结】的更多相关文章

1.二分优化 (使用二分查找优化查找效率) 典型例题:LIS dp[i]保存长度为 i 的上升子序列中最小的结尾,可以用二分查找优化到nlogn 2.数学优化 (通过数学结论减少状态数) 例题1:hdu4623 题解:http://www.cnblogs.com/oneshot/p/4064852.html 例题2:usaco4.11 题解 大意是求10个数及其倍数最大不能表示的数 有数论结论证明对于互质的p,q,最大不能表示的数不会超过p*q,所以这个题就成了有上限(256*256)的问题了,…
持续更新!! DP的难点主要分为两类,一类以状态设计为难点,一类以转移的优化为难点. DP的类型 序列DP [例题]BZOJ2298 problem a 数位DP 常用来统计或者查找一个区间满足条件的数,然后按数位顺序DO,一般需要仔细分情况讨论,常见处理如把区间拆为\([1,l),[1,r]\),记忆化,预处理等. [例题]BZOJ3131 淘金 概率DP 概率DP是对一类求时间概率或者期望概率DP的总称. 对于求概率问题,有时利用补集转化,有时将其转化为计数问题.求期望大多利用期望的线性性来…
[学习笔记]动态规划-各种 DP 优化 [大前言] 个人认为贪心,\(dp\) 是最难的,每次遇到题完全不知道该怎么办,看了题解后又瞬间恍然大悟(TAT).这篇文章也是花了我差不多一个月时间才全部完成. [进入正题] 用动态规划解决问题具有空间耗费大.时间效率高的特点,但也会有时间效率不能满足要求的时候,如果算法有可以优化的余地,就可以考虑时间效率的优化. [DP 时间复杂度的分析] \(DP\) 高时间效率的关键在于它减少了"冗余",即不必要的计算或重复计算部分,算法的冗余程度是决定…
题意       给你一些点( <= 50),让你找到k个点,使得他们之间的最小距离最大. 思路:       求最小的最大,我们可以直接二分去枚举距离,但是要注意,不要去二分double找距离,要知道,最后的答案肯定是其中某个点的两点距离,所以我们直接把所有点的距离求出来,放一个数组里面,然后sort下,然后去二分这个数组的下标,根据下标找距离,这样可以节省点时间(这种情况这针对于某些题目,如果点非常多,n*(n-1)/2距离的种类是有可能很多,这样还不如直接二分double快点,毕竟二分是l…
标 * 的是推荐阅读的部分 / 做的题目. 1. 动态 DP(DDP)算法简介 动态动态规划. 以 P4719 为例讲一讲 ddp: 1.1. 树剖解法 如果没有修改操作,那么可以设计出 DP 方案 \(f_{i,0/1}\) 分别表示不选(\(0\))/ 选(\(1\))点 \(i\) 的最大权值,那么有 \(f_{i,0}=\sum_{x\in S_i}\max(f_{x,0},f_{x,1}),f_{i,1}=v_i+\sum_{x\in S_i}f_{i,0}\). 如果加上修改操作,那…
收录一些比较冷门的 DP 优化方法. 1. 树上依赖性背包 树上依赖性背包形如在树上选出若干个物品做背包问题,满足这些物品连通.由于 01 背包,多重背包和完全背包均可以在 \(\mathcal{O}(V)\) 的时间内加入一个物品,\(\mathcal{O}(V ^ 2)\) 的时间内合并两个背包,所以不妨设背包类型为多重背包. 先考虑一个弱化版问题.给定一棵有根树,若一个节点被选,则它的父亲必须被选. 显然存在一个 \(\mathcal{O}(nV ^ 2)\) 的树形 DP 做法,它能求出…
子串 (substring.cpp/c/pas) [问题描述] 有两个仅包含小写英文字母的字符串 A 和 B.现在要从字符串 A 中取出 k 个 互不重 叠 的非空子串,然后把这 k 个子串按照其在字符串 A 中出现的顺序依次连接起来得到一 个新的字符串,请问有多少种方案可以使得这个新串与字符串 B 相等?注意:子串取出 的位置不同也认为是不同的方案. [输入格式] 输入文件名为 substring.in. 第一行是三个正整数 n,m,k,分别表示字符串 A 的长度,字符串 B 的长度,以及问…
思路: f[i][j]表示n1串第i个与n2串第j个且以j结尾的LCIS长度. 很好想的一个DP. 然后难点是优化.这道题也算是用到了DP优化的一个经典类型吧. 可以这样说,这类DP优化的起因是发现重复计算了很多状态,比如本题k的那层循环. 然后就可以用maxl标记搞一下,将O(n^3)变成O(n^2). #include<iostream> #include<cstdio> #include<algorithm> #include<cstring> usi…
取数字(dp优化) 给定n个整数\(a_i\),你需要从中选取若干个数,使得它们的和是m的倍数.问有多少种方案.有多个询问,每次询问一个的m对应的答案. \(1\le n\le 200000,1\le m\le 100,1\le q\le 30,-10^9\le a_i\le 10^9\). 首先有一个暴力dp:\(f[i][j]\)表示选到第i个数,和mod m是j的方案数.但是显然,这个dp是\(O(nm)\)的,然后就tle了. 换一个思路dp?由于我们只需要一个数模m的值,可以先把所有数…
该文是对dp的提高(并非是dp入门,dp入门者请先参考其他文章) 有时候dp的复杂度也有点大...会被卡. 这几次blog大多数会讲dp优化. 回归noip2017PJT4.(题目可以自己去百度).就是个很好的案例.那题是个二分套dp如果dp不优化复杂度O(n^2logn)还能拿60分(CCF太仁慈了,如果是我直接给10分). 正解加上个单调队列(其实是sliding window)O(nlogn) 我们发现,此类dp是这样的 状态i是由[l,r]转移过来的.且i在向右移动的过程中,[l,r]一…