
动态规划
文章平均质量分 58
yuanba_xs
分享程序员的体会与知识
展开
-
矩阵连乘的动态规划算法
矩阵链乘问题输入:共两行第一行 N ( 1第二行有 N+1 个数,分别为 A1 、 A2 ...... An+1 ( 1输出:共两行第一行 M ,为最优代价。注:测试用例中 M 值保证小于 2^31第二行为最优顺序。如 (A1((A2A3)A4)) ,最外层也加括号。注意:测试用例已经保证了输出结果唯一,所以没有AAA的情况.inpu原创 2017-03-23 19:44:58 · 1785 阅读 · 0 评论 -
poj1463树形动归
给定一棵树,怎样使得占据最少的节点能够监视所有的边Sample Input40:(1) 11:(2) 2 32:(0)3:(0)53:(3) 1 4 21:(1) 02:(0)0:(0)4:(0)Sample Output12思路分析:(树形DP)1.最优子结构:所求问题是根部覆盖或者不覆盖所得到的最优解,那么子问题为其儿子覆原创 2017-03-24 10:36:58 · 535 阅读 · 0 评论 -
求最大子列和 dp
求最大子列和:动态规划定状态:b[j]:前j个数的最大子列和状态转移方程:b[j] = max{b[j-1]+a[j],a[j]}, 1b[j]表示1~j序列的最大子列和#include #include #define N 1000005using namespace std;int n;int a[N];int maxsum(){ int sum =原创 2017-03-23 20:32:24 · 350 阅读 · 0 评论 -
poj1231最大连续子序列和并输出子列的位置
Problem Description给定K个整数的序列{ N1, N2, ..., NK },其任意连续子序列可表示为{ Ni, Ni+1, ...,Nj },其中 1 例如给定序列{ -2, 11, -4, 13, -5, -2 },其最大连续子序列为{ 11, -4, 13 },最大和为20。在今年的数据结构考卷中,要求编写程序得到最大和,现在增加一个要求,即还需要输出该原创 2017-02-23 16:14:37 · 967 阅读 · 0 评论 -
最长上升子序列LIS
LIS:dp[i]含义:以下标为i的元素为结尾的最长上升子序列的长度dp[]初始化为1dp[i] = max(dp[j]+1){其中0最后结果为max{dp[i],0#include #include #include #define N 1005using namespace std;int a[N];int dp[N];int n;int main(原创 2017-03-23 20:20:24 · 366 阅读 · 0 评论 -
最长公共子序列LCS
考虑最长公共子序列问题如何分解成子问题,设A=“a0,a1,…,am-1”,B=“b0,b1,…,bm-1”,并Z=“z0,z1,…,zk-1”为它们的最长公共子序列。不难证明有以下性质:(1) 如果am-1=bn-1,则zk-1=am-1=bn-1,且“z0,z1,…,zk-2”是“a0,a1,…,am-2”和“b0,b1,…,bn-2”的一个最长公共子序列;(2) 如果am-1原创 2017-03-23 20:17:20 · 336 阅读 · 0 评论 -
poj1163数字三角形
给定已知三角形,求从顶部走出底部路径权值和的最大值,权值均在0~99且为整数。三角形行数不超过100。每次只能向左下或右下方走Sample Input573 88 1 02 7 4 44 5 2 6 5Sample Output30思路:动归方程:dp[i][j] = max(dp[i+1][j],dp[i+1,j+1]) + map[i原创 2017-03-23 20:13:03 · 372 阅读 · 0 评论 -
poj1384完全背包恰好装满
#include #include #include #define N 10050using namespace std;const int inf = 0x3f3f3f3f;int n, v;//物品的种数,背包的容量int dp[N], c[N], w[N];void init()//恰好装满的初始化{ for (int i = 1; i <= v; i++) d原创 2017-03-23 20:09:40 · 756 阅读 · 0 评论 -
完全背包
完全背包问题:已知有n中物品和一个容量为v的背包,每种物品均有无限件,第i种物品的费用为c[i],价值是w[i]求如何放使得物品费用总和不超过背包容量,且价值总和最大。方法1:仿照01背包,对每件物品的取件数再穷举,即确定每件物品的件数范围,然后当做01背包处理。f[i][j] = max{f[i-1][v-k*c[i]] + k*w[i]} 0方法2:(优化)原创 2017-03-23 20:07:20 · 264 阅读 · 0 评论 -
01背包问题
01背包问题有N件物品和一个容量为V的背包。第i件物品的费用是c[i],价值是w[i]。求解将哪些物品装入背包可使价值总和最大。特点是:每种物品仅有一件,可以选择放或不放。f[i][v] = Max{f[i−1][v], f[i−1][v−c[i]] + w[i]}时间复杂度O(n*v),空间复杂度O(n*v)空间复杂度可优化为O(n),可采用滚动数组。原创 2017-03-23 20:03:09 · 292 阅读 · 0 评论 -
硬币游戏
Alice和Bob发明了一种新的两人游戏。最初,地面放置有一摞共n个硬币( 5 输入: 单组用例。 第一行有正整数n (5 之后n行,每行一个整数,第i + 1行的整数代表Ci( 1 Ci <= 100000 )输出: 一行,一个整数代表原创 2017-03-23 19:52:07 · 1518 阅读 · 0 评论