动态规划
死咸鱼的成长之路
这个作者很懒,什么都没留下…
展开
-
01背包问题
问题描述 给定N个物品,每个物品有一个重量W和一个价值V.你有一个能装M重量的背包.问怎么装使得所装价值最大.每个物品只有一个.输入格式 输入的第一行包含两个整数n, m,分别表示物品的个数和背包能装重量。 以后N行每行两个数Wi和Vi,表示物品的重量和价值输出格式 输出1行,包含一个整数,表示最大价值。样例输入3 52 33 54 7样例输出8...原创 2018-03-10 11:04:10 · 706 阅读 · 0 评论 -
UVa城市里的间谍
/************************************************************************//* 某城市地铁是线性的,有n个车站,从左到右编号1-n。有M1辆列车从第1站开始往右开,还有M2辆列车从第n站开始往左开。在时刻0,Mario从第1站出发,目的在时刻T会见车站n的一个间谍。在车站等车时容易被抓,所以她决定尽量躲在开动的火车上,...原创 2018-03-25 00:01:21 · 150 阅读 · 0 评论 -
Stamps and Envelope size UVA 242
假定一张信封最多贴5张邮票,求出最大连续邮资。输入S(S<=10) 和若干有邮票组合(面值不超过100) , 选出连续邮资最大 一个组合。如果有多个并列,邮票组合中邮票张数应最多,如果还有并列,邮票从大到小后字典序应最小。思路:暴力求解动态规划,遍历邮资。 对于邮票组合C, dp[i] 表示邮资i至少需要多少张来自于C的邮票才能组合起来。推导式:dp[i] = min(dp[i-x]+1 ...原创 2018-04-25 21:24:07 · 179 阅读 · 0 评论 -
POJ-3254 状压DP
http://poj.org/problem?id=3254题目大意:输入n行m列的01值。 1代表可放牛,0代表不可放牛,上下和同一行都不能有相邻。 全是0算一种情况。 求一共有多少种放法。 一道状压DP模板题,他的提升可见 1185(炮兵阵地)。首先恶补一下位运算,因为需要用位运算的技巧快速判断当前状态是否符合规定。状压DP(转态压缩动态规划)思想:保留了DP的利用上一状态的最优求当前状态的...原创 2018-05-11 21:13:29 · 155 阅读 · 0 评论 -
LIS
最长上升子序列问题两种复杂度 O(n^2) 和 O(nlogn) 思想很简单,以每一个元素为结尾, 内层循环判断大小,用cnt(i) 表示以下标i的元素为结尾的最大上升值,【0,i】区间内,已经求得最优解,典型的动归思想,利用局部最优求整体最优。cnt(i) = max( cnt(j)+1,cnt(i) ); 先附上较慢的算法O(n^2):int LIS(vector<int>...原创 2018-05-13 22:06:16 · 513 阅读 · 0 评论 -
POJ1050 To the Max
DescriptionGiven a two-dimensional array of positive and negative integers, a sub-rectangle is any contiguous sub-array of size 1*1 or greater located within the whole array.The sum of a rectangle is ...原创 2018-04-29 17:04:44 · 117 阅读 · 0 评论 -
矩阵连乘
矩阵要求前提:相邻矩阵满足相乘条件c++版//矩阵连乘问题: // 求A1...An连乘后 最小的相乘次数 #include<iostream>#include<memory.h>using namespace std;#define inf 0x3f3f3f3f#define max 100// A1 A2 A3 A4 ...原创 2018-10-18 12:52:27 · 491 阅读 · 0 评论 -
LCS最长公共子序列
#include<iostream>#include<string>#include<vector>using namespace std;string s1 = "ABCDDEAD";string s2 = "BBDCCDEA";int len;//求s1 与 s2的最长公共子序列 int LIS(vector<vector<i...原创 2018-11-07 20:42:33 · 122 阅读 · 0 评论