动态规划优化

bzoj2064 分裂

存在通解:把原始集合都合并,再一一拆开。

如果可以划分一些集合,使得原始集合和目标集合对应的小集合相等,那么可以节省操作次数。

ans=(n1-1)+(n2-1)-2*(x-1) x为划分的相同集合数。

n<=10,状压

另外,其实原始集合一个x,就是往右x步,目标集合一个y,就是往左y步。

那么,两个个集合对应和相等,就是走出去再回来、

f[S1][S2]表示,原始集合选择S1的元素,目标集合选择S2元素,最多可以凑成几个和相等的集合。也即能走多少个圈。

预处理集合对应的和。

转移枚举选择哪个元素(原始或者目标)2n复杂度。

枚举状态2^2n

所以,O(20*2^20)

bzoj3173[TJOI2013]最长上升子序列

题目的特点是,从1~N从小到大加入。

当然可以平衡树动态维护,但是不够优美。

回忆LIS的状态设计,f[]以i结尾LIS

那么,对于一个x,比x大的y一定不会出现在f[x]的方案中。

所以,我们可以把最终的序列求出来,然后求f[1~n]

然后,逆序输出,ansi,就是对权值为1~i的位置求f[]的最大值。

就是一个权值的前缀和。

至于求最终的序列,可以平衡树。但是可以倒序,用树状数组即可。

原文地址:https://www.cnblogs.com/Miracevin/p/9824534.html

时间: 2024-11-29 07:57:10

动态规划优化的相关文章

1D1D动态规划优化

1D1D动态规划优化 1D/1D 动态规划优化初步所谓1D/1D 动态规划,指的是状态数为O(n),每一个状态决策量为O(n)的动态规划方程.直接求解的时间复杂度为O(n2),但是,绝大多数这样的方程通过合理的组织与优化都是可以优化到O(nlogn)乃至O(n)的时间复杂度的.这里就想讲一讲我对一些比较初步的经典的优化方法的认识.本文中不想进行过多的证明与推导,主要想说明经典模型的建立.转化与求解方法.由于本人认识与水平相当有限,如果出现什么错误与疏漏,还请大牛多多指正.另外,也希望大牛们更多地

POJ 3046 Ant Counting(“动态规划” 优化递推关系式)

http://poj.org/problem?id=3046 蚂蚁牙黑,蚂蚁牙红:有A只蚂蚁,来自T个家族.同一个家族的蚂蚁长得一样,但是不同家族的蚂蚁牙齿颜色不同.任取n只蚂蚁(S<=n<=B),求能组成几种集合? 这是<2.3 记录结果再利用的"动态规划" 优化递推关系式>练习题的第二题. 定义 dp[i][j] := 使用前i个家族可以配出来"元素个数为j"的集合的个数. 那么dp[0][0] = 1,不使用任何蚂蚁配出空集的个数为1.

nyoj546 Divideing Jewels (动态规划+优化||搜索+剪枝)

题意:给你n个宝珠,然后给宝珠个价值,价值范围[1,10],能不能均分给两个人. 输入的数据:价值分别为1,2,3...10的有多少个. 这道题和队友做了好久最终在结束前5分钟AC..第一次简单的动规结果TLE 不过和队友认为一定是动规.就在想如何优化,想到如果某个价值的个数有偶数个就不判断,奇数个就存入数组. 结果还是wr...我们不放弃啊...为就想着写几组数组,当0 2 0 1 0 0 0 0 0 0 输出结果为不能,显然答案是能的. 还剩下不到20分钟了.这个时候就是靠感觉了,直接就写如

【bzoj2216】[Poi2011]Lightning Conductor 1D1D动态规划优化

Description 已知一个长度为n的序列a1,a2,…,an.对于每个1<=i<=n,找到最小的非负整数p满足 对于任意的j, aj < = ai + p – sqrt(abs(i-j)) Input 第一行n,(1<=n<=500000)下面每行一个整数,其中第i行是ai.(0<=ai<=1000000000) Output n行,第i行表示对于i,得到的p Sample Input 6532424 Sample Output 235354 题解 http

BZOJ 1563 诗人小G(四边形优化)

题目链接:http://61.187.179.132/JudgeOnline/problem.php?id=1563 题意: 思路:设s[i]表示前i个句子的长度和,那么有转移方程: 有大牛证明这个满足四边形不等式,证明应该 比较复杂.在<1D/1D动态规划优化初步>这篇文章中,作者说实战中可以直接打表看看是不是满足,感觉还是比较实用的.不管那么多了,现在我们知道了满 足四边形不等式,也就是满足决策点单调.比如f[i]是用j更新的,那么i之后的点不可能用j之前的点更新,这就是决策单调性.那么我

【听课记录】17-7-11 动态规划 - 朱全民

此文转载时必须通知博主,并把原文链接及原作者放在正文醒目位置. ————————动态规划初步———————— 一.常见动态规划:求最优解.次优解:统计问题. 二.DP模型:线型- 一条直线.两条直线.多条直线(二维矩阵).树型- 明显能够构成一棵树.多叉树转二叉树:孩子兄弟表示法.图型- 以图为模型.基于连通性的状态压缩DP(哈密顿环).集合类型 三.DP概念:阶段.状态.决策.状态转移.最优化原理.无后效性原理. 四.步骤划分阶段—设置状态—状态转移方程—(优化决策) 五.例题分析 —————

队列优化和斜率优化的dp

可以用队列优化或斜率优化的dp这一类的问题为 1D/1D一类问题 即状态数是O(n),决策数也是O(n) 单调队列优化 我们来看这样一个问题:一个含有n项的数列(n<=2000000),求出每一项前面的第m个数到它这个区间内的最小值 可以使用RMQ求区间最小值,那么时间复杂度是O(nlogn),不是让人很满意. dp[i]为i-m+1->i这个区间的最小值. 那么状态转移方程是 可以看出,这个题目的状态数是O(n),决策数是O(m),且决策的区间是连续的,那么可以尝试想办法把O(m)优化成O(

BZOJ 1010 玩具装箱toy(四边形不等式优化DP)(HNOI 2008)

Description P教授要去看奥运,但是他舍不下他的玩具,于是他决定把所有的玩具运到北京.他使用自己的压缩器进行压缩,其可以将任意物品变成一堆,再放到一种特殊的一维容器中.P教授有编号为1...N的N件玩具,第i件玩具经过压缩后变成一维长度为Ci.为了方便整理,P教授要求在一个一维容器中的玩具编号是连续的.同时如果一个一维容器中有多个玩具,那么两件玩具之间要加入一个单位长度的填充物,形式地说如果将第i件玩具到第j个玩具放到一个容器中,那么容器的长度将为 x=j-i+Sigma(Ck) i<

动态规划走楼梯问题

有一条楼梯,总共有9级阶梯,从地面上出发,如果每次可以走3级,4级或6级楼梯,问共有几种方案可以走到? 解决方案一: 第一个方法比较简单,很容易想到,就是用深度搜索,我们可以反过来,把情况看出从第9层阶梯走到路面,把所有可以出现的情况都列出来,然后判断是否能到达第9级阶梯,如果可以,就把方案数加一. 代码如下: public class DPStair { static int count=0; //计算F(n)被调用了计次 static int F(int n) { count++; if(n