动态规划类型总结

动态规划类型总结

1.最长上升子序列,最大连续子序列和最长公共子序列(zxh,415--430,556--560,587--591,uva 11400,uva 11584,uva1625)

2.背包问题(uva 12563,金明的预算方案)

3.区间DP(zxh,488--502,算法导论相应题目)

4.坐标DP (noip2007,noip2008,滑雪)

5.子矩阵问题(zxh 562--569,挑战程序与算法)

6.DAG上的动态规划(及怎样记录路径)(uva 116)

7.状态压缩动态规划(难度较大)(zxh 638--657)

8.树形DP(zxh 657--670,HDU6006,poj2411)

9.多阶段决策型动态规划(紫书)

10.双重动规(zxh,623--632,poj2964)

11.图形分割问题(zxh,621--621)

12.普通型动态规划(洛谷)

原文地址:https://www.cnblogs.com/lmjer/p/8464811.html

时间: 2024-10-11 04:55:19

动态规划类型总结的相关文章

leetcode 动态规划类型题

1,Triangle 1 int mininumTotal(vector<vector<int>>& triangle) { 2 for (int i = triangle.size() - 2; i >= 0; --i) { 3 for (int j = 0; j < i + 1; ++j) { 4 // 从下往上依次保存当前路径的最小值,上层只会用到下层的最小值 5 triangle[i][j] += min(triangle[i + 1][j], tria

一道简单的动态规划题目——House Robber

一.题目 House Robber(一道Leetcode上的关于动态规划的简单题目)具体描述如下: There is a professional robber planning to rob houses along a street. Each house has a certain amount of money stashed, the only constraint stopping you from robbing each of them is that adjacent hous

动态规划23题解析

最近两周做了动态规划的23道经典好题,涉及到区间.树形.数位等三种动态规划类型,现在将这23道题的题解写在下面,方便大家借鉴以及我加深记忆. upd at:20190814 20:46.T7二叉苹果树 1.石子合并 经典的区间DP问题,枚举合并的堆数作为阶段,设f[i][j]表示i->j这段区间内的最优方案,考虑在这段区间内枚举断点k,不难得到f[i][j]=min(f[i][k]+f[k+1][j]+sum(i,j))(最大值同理).破环为链后直接进行DP即可. #include<iostr

Maximum&#160;Product&#160;Subarray

Find the contiguous subarray within an array (containing at least one number) which has the largest product. For example, given the array [2,3,-2,4],the contiguous subarray [2,3] has the largest product = 6. 看到这道题,很明显的一套动态规划类型的题目,和最长升序子序列之类的十分类似,那么首先

叠放箱子解题报告

带权值的最长上升子序列f[i]表示从后往前讨论叠放i个箱子的最小重量(因为是反向读入,其实从前往后讨论,更像最长上升子序列了) 动规方程:  f[k+1]=mid(f[k+1], self[i]+f[k]) (stand[i]>=f[k]) (0<=k<i) 最长上升子序列的方程  f[i]=f[j]+1(1<=j<i, a[j]<a[i]) 又一次犯了和最长上升子序列一样的算法错误又一次屁颠屁颠地给f[1]赋了初值然后从f[2]开始讨论,好吧,从f[2]讨论就讨论吧,

浅谈LCS &amp; LIS

\(LIS\)(最长上升子序列) 求长度 \(dp\) - \(O(n ^ 2)\) 动态规划的做法 令\(f[i]\)表示以第\(i\)个元素结尾的\(LIS\)长度 则有: \(f[i] = max(f[i],f[j] + 1),(a[j] < a[i],j < i)\) 通过枚举\(f[i]\)与\(f[j]\)来不断转移状态,然后不断枚举更新最大值 \(Code\): #include<cstdio> using namespace std; #define maxn 10

&lt;LeetCode&gt;动态规划——Two Sequences 类型题目

一.类型描述 Two Sequences 的题目一般会提供两个sequence,一般问最大/最小.true/false.count(*)这几类的问题. 其中,Two Sequences的动态规划题目的四要素: state:dp[i][j] 一般表示 第一个sequence的前i个字符 和 第二个sequence的前j个字符 怎么怎么样. Initialization: 这类型动态规划一般初始化dp数组的方式是根据题目的含义初始化第一行和第一列. function:解决动态规划的function问

[转]五大常用算法:分治、动态规划、贪心、回溯和分支界定

Referred from http://blog.csdn.net/yapian8/article/details/28240973 分治算法 一.基本概念 在计算机科学中,分治法是一种很重要的算法.字面上的解释是“分而治之”,就是把一个复杂的问题分成两个或更多的相同或相似的子问题,再把子问题分成更小的子问题……直到最后子问题可以简单的直接求解,原问题的解即子问题的解的合并.这个技巧是很多高效算法的基础,如排序算法(快速排序,归并排序),傅立叶变换(快速傅立叶变换)…… 任何一个可以用计算机求

动态规划分析总结——如何设计和实现动态规划算法

进行算法设计的时候,时常有这样的体会:如果已经知道一道题目可以用动态规划求解,那么很容易找到相应的动态规划算法并实现:动态规划算法的难度不在于实现,而在于分析和设计-- 首先你得知道这道题目需要用动态规划来求解.本文,我们主要在分析动态规划在算法分析设计和实现中的应用,讲解动态规划的原理.设计和实现.在很多情况下,可能我们能直观地想到动态规划的算法:但是有些情况下动态规划算法却比较隐蔽,难以发现.本文,主要为你解答这个最大的疑惑:什么类型的问题可以使用动态规划算法?应该如何设计动态规划算法? 动