【练习09】简单动态规划
文章平均质量分 63
liuzhushiqiang
这个作者很懒,什么都没留下…
展开
-
【练习09】简单动态规划 1001 最大连续子序列
//模板开始#include #include #include #include #include #include #include #include #include #include #include #include #include#define SZ(x) (in原创 2013-05-10 11:27:06 · 608 阅读 · 0 评论 -
dp模型(有些不太懂)
据说NOIP上Dp是必考的,可是翻来覆去也不过那么几个模型,所以想到总结一下。写得不全,大家多指正,我会不断扩充的。1、背包模型包括0-1背包、无限背包、有限背包、有价值背包、小数背包(贪心即可)等,是极为经典的模型,其转化与优化也是很重要的。2、最长非降子序列模型改版:渡河问题、合唱队型等3、最大子段和模型改版:K大子段和、最佳游览,最大子矩阵和等。4、LCS模型转载 2013-08-12 22:14:15 · 5197 阅读 · 0 评论 -
HDU 3555 Bomb 数位DP
题意就是找0到n有多少个数中含有49。数据范围接近10^20DP的状态是2维的dp[len][3]dp[len][0] 代表长度为len不含49的方案数dp[len][1] 代表长度为len不含49但是以9开头的数字的方案数dp[len][2] 代表长度为len含有49的方案数状态转移如下dp[i][0] = dp[i-1][0] * 10 - dp[i-1][1]转载 2013-08-09 22:12:06 · 505 阅读 · 0 评论 -
传说中的斜率优化
对于形如f[i]由其之前若干f[j]决定的dp来说,优化大致有单调队列,线段树,四边形不等式和斜率优化。单调队列一般是累加关系,可以提前直接预先计算后面的dp值,从而决策。而四边形不等式则多用于第i个目标支配k到j这一段。至于乘除关系的则可以使用斜率优化。当我们想知道两个决策点哪一个更优时,可以将两个决策点所产生的决策表达式写出来。设为f[j1]和f[j2]。令j1由于对于f[转载 2013-08-12 21:51:43 · 703 阅读 · 0 评论 -
DP问题各种模型的状态转移方程
1(最长公共子串(注意和最长公共子序列区别))两个字符串str1和str2,长度分别为(l1,l2)dp[i][j]表示以两个字符串分别以第i和第j个字符结尾所能达到的公共子序列的长度,由于下面涉及到i-1和j-1,那么这个时候我们一般从i=1和j=1开始到i<=len1, j。 if(str[i-1]=str[j-1]) d转载 2013-08-10 12:47:55 · 650 阅读 · 0 评论 -
状态压缩动态规划
终于弄懂了什么是状态压缩!以下转载自Blog:引入 首先来说说“状态压缩动态规划”这个名称,顾名思义,状态压缩动态规划这个算法包括两个特点,第一是“状态压缩”,第二是“动态规划”。 状态压缩: 从状态压缩的特点来看,这个算法适用的题目符合以下的条件: 1.解法需要保存一定的状态数据(表示一种状态的一个数据值),每个状态数据通常情况下是可以通过2进制来表示的。这就要求转载 2013-08-07 21:20:51 · 1869 阅读 · 0 评论 -
HDU 2870 Largest Submatrix DP求最大子矩阵
题目:http://acm.hdu.edu.cn/showproblem.php?pid=2870题意:给出一个字符矩阵Matritx[][], 求其最大子矩阵, 详细如题.解题思路: 将全部字符依次转化a, b, c, 再分别求出这三个矩阵的最大子矩阵即可. 于是, 问题转化为求矩阵中最大的子矩阵了. 设置一个变量Num[][]记录位置的最大高度,转载 2013-08-09 23:09:50 · 600 阅读 · 0 评论 -
hdoj 2830 Matrix Swapping II (DP求最大子矩阵的变型题)
#include #include int m, n, h[1001], num[1001]; char matrix[1001]; int main() { //freopen("in.txt", "r", stdin); while(scanf("%d %d",&m, &n) != EOF) { getchar();转载 2013-08-12 11:14:25 · 653 阅读 · 0 评论 -
HDU 1505 City Game
这题是HDU1506 的加强版,只要把算出以i 行为底能达到的最到的最大高度,再扫描每一行,就转化为 HDU1506 的问题了,即算出以此点为最低点能两边延伸的最大距离,最大延伸距离乘以该点的高度就是面积了,HDU 2870 则是此题的加强版。#include#include#define M 1005int a[M][M],l[M],r[M];int main(){ in转载 2013-08-12 08:49:34 · 498 阅读 · 0 评论 -
hdoj 1506 Largest Rectangle in a Histogram
DP 找出 a[i] 的左边和右边与自己连着的比自己大的数的长度 , 然后用这个长度乘以 a[i], 乘积最大的那个就是答案 .#include#include#define LL long long#define N 100005int i,n,t;LL a[N],l[N],r[N],max;int main(){ while (scanf("%d",&n) &&转载 2013-08-11 22:51:31 · 968 阅读 · 0 评论 -
HDU 动态规划(46道题目)倾情奉献~ 【只提供思路与状态转移方程】
Robberies http://acm.hdu.edu.cn/showproblem.php?pid=2955 背包;第一次做的时候把概率当做背包(放大100000倍化为整数):在此范围内最多能抢多少钱 最脑残的是把总的概率以为是抢N家银行的概率之和… 把状态转移方程写成了f[j]=max{f[j],f[j-q[i].v]+q[i].money}(f[j]表示在概率j之下能抢的大洋转载 2013-08-10 12:54:06 · 653 阅读 · 0 评论 -
数位DP(按位DP)
之前说过要做个专题,虽然隔了好长时间。。但说话还是算数的,把之前做的ppt翻出来贴上,好吧,我就是懒。。见识的还是少,欢迎讨论啊~~数位DP•在给定区间[A,B]内,找满足要求的数。•要求一般和数大小无关,而与数的组成有关•例如,递增的,1234,2579…• 双峰的,19280,26193…• 含49的转载 2013-08-09 18:13:13 · 576 阅读 · 0 评论 -
【练习07】 DFS 1011 蜘蛛牌
算法思路:DFS。注意学习剪枝技巧,枚举的顺序和枚举的方法。#include#include#includeusing namespace std;/*简直就是一个悲剧 自己写的错误百出 最后还是要学习别人的代码 才能AC*/const int INF=100000000;int vis[12];int a[12],ans;void DFS(int cur,i转载 2013-07-31 15:24:50 · 568 阅读 · 0 评论 -
【练习09】简单动态规划 1002 Max Sum
第一次提交的代码使用了递归,而由于数据比较大递归的层数比较多,导致出现了“栈溢出”。第一次提交代码://模板开始#include #include #include #include #include #include #include #include #include #include原创 2013-05-14 17:31:10 · 621 阅读 · 0 评论 -
【练习09】简单动态规划 1003 Super Jumping! Jumping! Jumping!
算法思路:动态规划 状态转移方程:d[i] = d[j] + a[i] ; j //模板开始#include #include #include #include #include #include #include #include #include #include #include #i原创 2013-07-14 17:57:18 · 501 阅读 · 0 评论 -
【练习09】简单动态规划 1004 命运
算法思路:动态规划状态转移方程:score[i][j] = max{score[i + 1][j], score[i][j + 1], score[i][j * k]}, k > 1。具体实现:采用递推的方法,先单独考虑边界值,接下来内层的方格用一个两层循环递推。//模板开始#include #include #include #include原创 2013-07-15 10:15:58 · 484 阅读 · 0 评论 -
【练习09】简单动态规划 1006 数塔
算法思路:简单DP,经典的树塔模型,反向递推即可。代码如下://模板开始#include #include #include #include #include #include #include #include #include #include #include #include #inclu原创 2013-08-13 11:31:39 · 641 阅读 · 0 评论