Dynamic Programming
GNIHTON
这个作者很懒,什么都没留下…
展开
-
dd大牛的背包九讲-背包问题汇总
背包九讲目录 第一讲 01背包问题 第二讲 完全背包问题 第三讲 多重背包问题 第四讲 混合三种背包问题 第五讲 二维费用的背包问题 第六讲 分组的背包问题 第七讲 有依赖的背包问题 第八讲 泛化物品 第九讲 背包问题问法的变化 附:USACO中的背包问题 前言本篇文章是我(dd_engi)正在进行中的一个雄心勃勃的写作计划的一部分,这个计划的内容是写作一份较为完善的NOIP难转载 2017-12-29 09:04:58 · 336 阅读 · 0 评论 -
Poj2663. Tri Tiling
题目链接:http://poj.org/problem?id=2663 思路:这道题目要求我们求出有多少种方法用1*2牌去完美覆盖3*n的棋盘。利用动态规划,dp[i]表示3*i的棋盘的可完美覆盖的总数。我们可以将棋盘分为左右两部分,左边为可分割部分,右边为不可分割的部分。 当i=2时,右边有3*2区域是不可分割的,用1*2牌填铺共有3种方法,可得dp[i]=3*dp[i-2]。 当i=4时...原创 2018-01-05 10:21:06 · 191 阅读 · 0 评论 -
Poj1160.Post Office
题目链接:http://poj.org/problem?id=1160 思路:利用动态规划思想,令dp[i][j]表示i个邮局在前j个村庄的最优解,dis[i][j]表示在村庄V[i…j]之间只有一个邮局时的最优解,显然当邮局处于i,j中间位置时可达到最优解,状态转移方程可以表示为:dp[i][j] = min(dp[i][j], dp[i-1][k]+dis[k+1][j]) (i-1原创 2018-01-05 13:32:17 · 230 阅读 · 0 评论 -
Poj1463.Strategic game(树的最小点覆盖)
题目大致可以这样表示:给出一个n个结点的树,要求选出其中的一些顶点,使得对于树中的每条边(u, v),u和v至少有一个被选中. 请给出选中顶点数最少的方案. 思路:我们可以用dp[i][0]表示在不选择节点i的情况下,以i为根节点的子树,最少需要选择的节点数;dp[i][1]表示在选择节点i的情况下,以i为根节点的子数,最少需要选择的节点数。 1.当i为叶子节点时,dp[i][0] = 0;转载 2017-12-30 15:02:07 · 456 阅读 · 0 评论 -
Poj3254.Corn Fields(状态压缩DP)
先说说地图,地图上每一行的01代表一个状态,比如输入样例中的111、010,表示第一行的三个位置都可以种稻子,第二行中间的位置可以种稻子,然后,不能种稻子的地方一定不能种稻子(废话…)可以种稻子的地方可以选择种也可以选择不种,然后有一个前提条件,就是上下左右相邻的地方不能种稻子。 再说说怎么状态压缩,状态压缩就是把每一个状态压缩成二进制,二进制就是由01组成的,0代表不种,1代表种。二进制就要牵扯转载 2017-12-30 15:13:49 · 170 阅读 · 0 评论 -
longest common subsequence (LCS)
思路:这道题目给出两个字符串,要求出最长公共子序列。利用动态规划思想,令dp[i][j]表示x[1…i]和y[1…j]的最长公共子序列,状态转移方程为:dp[i][j] = (x[i-1]==y[j-1]) ? dp[i-1][j-1]+1 : max(dp[i][j-1], dp[i-1][j]);代码实现如下:#include #include #include using name原创 2018-01-06 12:05:36 · 212 阅读 · 0 评论 -
Poj1159.Palindrome
题目链接:http://poj.org/problem?id=1159 思路:这道题目要我们求出将给定字符串变为回文串所需最小插入字符数。利用动态规划思想,令dp[i][j]表示将字符串s[i…j]变为回文串所需插入的最小字符数,状态转移方程为:dp[i][j] = (str[i-1] == str[j-1]) ? dp[i+1][j-1] : (min(dp[i+1][j], dp[i][j-...原创 2018-01-06 11:38:41 · 227 阅读 · 0 评论 -
Poj1050.To the Max
题目链接:http://poj.org/problem?id=1050; 思路:这道题目要求出最大子矩阵和,可以将二维矩阵计算转化为一维最大连续子数组和。依次遍历所有行,对于当前行i,分别求出row[i,i+1],row[i,i+1,i+2]…row[i,i+1,…i+n]的相同列j的和保存在对应的temp[j]中,这样就可以将二维矩阵计算转化为一维数组了。代码实现如下:#include原创 2018-01-07 11:15:48 · 192 阅读 · 0 评论