随笔分类 - ACM_动态规划
摘要:题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2191思路分析:该问题为多重背包问题;假设状态dp[i][v]表示在前i件物品中选择物品放入大小为v的背包的最大的重量,则可以第i件物品可以选择0~n[i]件,所以可以得出状态方程 dp[i][v] = ...
阅读全文
摘要:题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1114思路分析:该问题要求为多重背包问题,使用多重背包的解法即可;假设dp[v]表示容量为v的背包中能够装下的最少的价值,因为一件物品可以装无限数次,所以可以得到递推公式: dp[v] = Min(dp[...
阅读全文
摘要:题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2546思路分析:该问题为0-1背包问题的变形题;问题求余额最少,设开始的余额为V,则求得用V-5可以买到的菜的最大价值,最后留下的5元则用来买菜价最高的菜,可以证明这种购买方式是能够产生最优解的;另外,因...
阅读全文
摘要:题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2602思路分析:该问题为经典的0-1背包问题;假设状态dp[i][v]表示前i件物品恰放入一个容量为v的背包可以获得的最大价值,则可以推导出dp递推公式dp[i][v] = Max{dp[i-1][v],...
阅读全文
摘要:题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1028思路分析:该问题要求求出某个整数能够被划分为多少个整数之和(如 4 = 2 + 2, 4 = 2 + 1 + 1),且划分的序列 2, 2 或者 2, 1, 1为单调非递增序列;使用动态规划解法:假...
阅读全文
摘要:题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3555思路分析:该问题要求求解1—N中的数中含有49的数的个数,可以使用DFA来递推dp公式;详细解释点击链接查看;代码如下:#include #include #include using namesp...
阅读全文
摘要:题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1423思路分析:[问题定义]给定两个序列A[0, 1,..., m]和B[0, 1, ..., n],要求这两个序列的最长公共上升子序列;该问题为动态规划问题,可以采用与求最长公共子序列与最长上升子序列相...
阅读全文
摘要:题目链接:http://poj.org/problem?id=1088思路分析:1>状态定义:状态dp[i][j]表示在位置map[i][j]可以滑雪的最长区域长度;2>状态转移方程:由于由位置[i, j]只能向四个方向移动,所以子问题最多有四个;所以dp[i][j]为其邻域可以滑雪的最大区域长度加...
阅读全文
摘要:题目链接:http://poj.org/problem?id=2192思路分析:该问题可以看做dp问题,同时也可以使用dfs搜索求解,这里使用dp解法;设字符串StrA[0, 1, …, n]和StrB[0,1, .., m]构成字符串Str[0, 1, … , m + n + 1];1)状态定义:...
阅读全文
摘要:题目链接:http://poj.org/problem?id=1836思路分析:假设数组为A[0, 1, …, n],求在数组中最少去掉几个数字,构成的新数组B[0, 1, …, m]满足条件B[0] … > B[m];该问题实质为求A[0, …, k]的最长递增子序列和A[j, …, n]中的最...
阅读全文
摘要:题目链接:http://poj.org/problem?id=2533思路分析:该问题为经典的最长递增子序列问题,使用动态规划就可以解决;1)状态定义:假设序列为A[0, 1, .., n],则定义状态dp[i]为以在所有的递增子序列中以A[i]为递增子序列的最后一个数字的所有递增子序列中的最大长度...
阅读全文
摘要:题目链接:http://poj.org/problem?id=1050思路分析:该题目为经典的最大子矩阵和问题,属于线性dp问题;最大子矩阵为最大连续子段和的推广情况,最大连续子段和为一维问题,而最大子矩阵为二维问题,可以考虑将二维问题转换为一维问题,即变为最大子段和问题即可求解;先考虑暴力解法,暴...
阅读全文
摘要:题目链接:http://poj.org/problem?id=2593思路分析:该问题为求给定由N个整数组成的序列,要求确定序列A的2个不相交子段,使这m个子段的最大连续子段和的和最大。该问题与poj 2479相同,解法也一样;代码如下:#include #include using namespa...
阅读全文
摘要:题目链接:http://poj.org/problem?id=2479思路分析:假设数组为A[1, 2, …, n],则问题需要求数组A[s1, s1+1, …, t1]中的最大连续子段和与A[s2, …. , t2]中的最大连续子段和的和最大;该问题实质上可以转换为求数组的最大子段和问题,只要预处...
阅读全文
摘要:题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1003思路分析:该问题为最大连续子段和问题,使用动态规划求解;1)最优子结构:假设数组为A[0, 1, 2,….., n],在所有的可能的解中,即解空间中找出所有的解,可以知道,所有的解都为以A[j](j...
阅读全文
摘要:题目链接:http://poj.org/problem?id=3356思路分析:题目为经典的编辑距离问题,其实质为动态规划问题;编辑距离问题定义:给定一个字符串source,可以对其进行复制,替换,删除,增加操作,另外根据具体情况已经规定了每种操作的cost,现在要求求出一个操作序列,使其变为一个给...
阅读全文
摘要:题目链接:http://poj.org/problem?id=1159思路分析:对该问题的最优子结构与最长回文子序列相同。根据最长回文子序列的状态方程稍加改变就可以得到该问题动态方程。假设字符串为A[0, 1, ..., n],则定义状态dp[i, j]表示字符串A[i, i+1, ..., j]成...
阅读全文
摘要:题目链接:http://poj.org/problem?id=3624思路分析:经典的0-1背包问题:分析如下:代码如下:#include using namespace std;const int MAX_N = 12880 + 10;int dp[MAX_N], W[MAX_N], D[MAX_...
阅读全文
摘要:题目链接:http://poj.org/problem?id=1458思路分析:经典的最长公共子序列问题(longest-common-subsequence proble),使用动态规划解题。1)问题定义:给定两个序列X=和Y = ,要求求出X和Y长度最长的最长公共子序列;2)问题分析: ...
阅读全文
摘要:题目链接:http://poj.org/problem?id=2250思路分析:最长公共子序列问题的变形,只是把字符变成了字符串,按照最长公共子序列的思路即可以求解。代码如下:#include #include #define IsEqual(a, b) strcmp((a), (b)) == 0e...
阅读全文

浙公网安备 33010602011771号