
【练习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 · 641 阅读 · 0 评论 -
dp模型(有些不太懂)
据说NOIP上Dp是必考的,可是翻来覆去也不过那么几个模型,所以想到总结一下。写得不全,大家多指正,我会不断扩充的。 1、背包模型 包括0-1背包、无限背包、有限背包、有价值背包、小数背包(贪心即可)等,是极为经典的模型,其转化与优化也是很重要的。 2、最长非降子序列模型 改版:渡河问题、合唱队型等 3、最大子段和模型 改版:K大子段和、最佳游览,最大子矩阵和等。 4、LCS模型转载 2013-08-12 22:14:15 · 5558 阅读 · 0 评论 -
HDU 3555 Bomb 数位DP
题意就是找0到n有多少个数中含有49。数据范围接近10^20 DP的状态是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 · 529 阅读 · 0 评论 -
传说中的斜率优化
对于形如f[i]由其之前若干f[j]决定的dp来说,优化大致有单调队列,线段树,四边形不等式和斜率优化。 单调队列一般是累加关系,可以提前直接预先计算后面的dp值,从而决策。而四边形不等式则多用于第i个目标支配k到j这一段。至于乘除关系的则可以使用斜率优化。 当我们想知道两个决策点哪一个更优时,可以将两个决策点所产生的决策表达式写出来。设为f[j1]和f[j2]。令j1 由于对于f[转载 2013-08-12 21:51:43 · 755 阅读 · 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 · 698 阅读 · 0 评论 -
状态压缩动态规划
终于弄懂了什么是状态压缩! 以下转载自Blog: 引入 首先来说说“状态压缩动态规划”这个名称,顾名思义,状态压缩动态规划这个算法包括两个特点,第一是“状态压缩”,第二是“动态规划”。 状态压缩: 从状态压缩的特点来看,这个算法适用的题目符合以下的条件: 1.解法需要保存一定的状态数据(表示一种状态的一个数据值),每个状态数据通常情况下是可以通过2进制来表示的。这就要求转载 2013-08-07 21:20:51 · 1910 阅读 · 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 · 632 阅读 · 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 · 681 阅读 · 0 评论 -
HDU 1505 City Game
这题是HDU1506 的加强版,只要把算出以i 行为底能达到的最到的最大高度,再扫描每一行,就转化为 HDU1506 的问题了,即算出以此点为最低点能两边延伸的最大距离,最大延伸距离乘以该点的高度就是面积了,HDU 2870 则是此题的加强版。 #include #include #define M 1005 int a[M][M],l[M],r[M]; int main() { in转载 2013-08-12 08:49:34 · 526 阅读 · 0 评论 -
hdoj 1506 Largest Rectangle in a Histogram
DP 找出 a[i] 的左边和右边与自己连着的比自己大的数的长度 , 然后用这个长度乘以 a[i], 乘积最大的那个就是答案 . #include #include #define LL long long #define N 100005 int i,n,t; LL a[N],l[N],r[N],max; int main() { while (scanf("%d",&n) &&转载 2013-08-11 22:51:31 · 991 阅读 · 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 · 677 阅读 · 0 评论 -
数位DP(按位DP)
之前说过要做个专题,虽然隔了好长时间。。但说话还是算数的,把之前做的ppt翻出来贴上,好吧,我就是懒。。 见识的还是少,欢迎讨论啊~~ 数位DP •在给定区间[A,B]内,找满足要求的数。 •要求一般和数大小无关,而与数的组成有关 •例如,递增的,1234,2579… • 双峰的,19280,26193… • 含49的转载 2013-08-09 18:13:13 · 603 阅读 · 0 评论 -
【练习07】 DFS 1011 蜘蛛牌
算法思路:DFS。 注意学习剪枝技巧,枚举的顺序和枚举的方法。 #include #include #include using 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 · 598 阅读 · 0 评论 -
【练习09】简单动态规划 1002 Max Sum
第一次提交的代码使用了递归,而由于数据比较大递归的层数比较多,导致出现了“栈溢出”。 第一次提交代码: //模板开始 #include #include #include #include #include #include #include #include #include #include原创 2013-05-14 17:31:10 · 648 阅读 · 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 · 526 阅读 · 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 · 510 阅读 · 0 评论 -
【练习09】简单动态规划 1006 数塔
算法思路:简单DP,经典的树塔模型,反向递推即可。 代码如下: //模板开始 #include #include #include #include #include #include #include #include #include #include #include #include #inclu原创 2013-08-13 11:31:39 · 665 阅读 · 0 评论