DP
文章平均质量分 59
流年冲淡时光
这个作者很懒,什么都没留下…
展开
-
简单背包DP
Problem A: RectangleTime Limit: 1 Sec Memory Limit: 256 MBSubmit: 207 Solved: 46[Submit][Status][Web Board]DescriptionNow ,there are some rectangles. The area of these rectangles i翻译 2015-03-28 18:09:42 · 495 阅读 · 0 评论 -
UVA111最长公共子序列
经典的最长公共子序列问题:经常会遇到复杂问题不能简单地分解成几个子问题,而会分解出一系列的子问题。简单地采用把大问题分解成子问题,并综合子问题的解导出大问题的解的方法,问题求解耗时会按问题规模呈幂级数增加。为了节约重复求相同子问题的时间,引入一个数组,不管它们是否对最终解有用,把所有子问题的解存于该数组中,这就是动态规划法所采用的基本方法。这里记住动态规划题的基本思考方向,原创 2016-04-11 12:24:42 · 368 阅读 · 0 评论 -
UVA103动态规划之DAG上的最长路及其字典序
小白书上讲的很清楚,因为没有起点和终点,所以这题用记忆化搜索。代码:#include#include#include#include#include#include#include#include#include#include#include#include#include#define LL long longusing namespace std;con原创 2016-04-11 14:45:11 · 708 阅读 · 0 评论 -
UVA10405最长公共子序列
前面那个题的变形,字母最长公共子序列。随便改一下就行了。#include#include#include#include#include#include#include#include#include#include#include#include#include#define LL long longusing namespace std;const int原创 2016-04-11 15:02:42 · 397 阅读 · 0 评论 -
uva10130 01背包加强版
其实就是一个重复10背包,刚开始把题意理解错了,后来敲了一发代码,不过样例分析了一下样例才得出正确题意。代码:#include#include#include#include#include#include#include#include#include#include#include#include#include#define LL long longusi原创 2016-05-11 08:17:35 · 446 阅读 · 0 评论 -
UVA531字符串版最长公共子序列,并输出
#include#include#include#include#include#include#include#include#include#include#include#include#include#define LL long longusing namespace std;const int maxn=1e3+10;const double eps=1原创 2016-05-11 16:34:38 · 354 阅读 · 0 评论 -
UVA147硬币组合问题,double型和int型的输出格式,以及double型本身存在的精度问题
这题,和前面那个题是一样的,所以直接敲了一样的代码,但是WA了,感觉应该没问题,百度了下题解,发现是double型本身的经度问题,把输入乘以100一百以后要加上0.5再去转换成int型,虽然不是很理解,但要注意这是double型本身存在的精度问题。#include#include#include#include#include#include#include#includ原创 2016-04-18 23:16:54 · 472 阅读 · 0 评论 -
UVA348矩阵链乘
经典的DP题,表达式结构,个人认为记忆化搜索比递推简单些,而且更容易理解,这里贴上代码:#include#include#include#include#include#include#include#include#include#include#include#include#include#define LL long longusing namespace原创 2016-05-07 10:20:23 · 384 阅读 · 0 评论 -
UVA62401背包,滚动数组,并打印路径
很典型的01背包问题,小白书上写的很详细,不再讲,这里主要就是怎么打印路径,开一个额外的标记数组就行了,另外这里没要求打印路径顺序,所以打印就行了。#include#include#include#include#include#include#include#include#include#include#include#include#include#defi原创 2016-05-07 12:33:49 · 345 阅读 · 0 评论 -
UVA56201背包简单版
这题可以往01背包上面想,一个DP思想的简单题。注意数组不要越界,我就因为这样WA了几发。#include#include#include#include#include#include#include#include#include#include#include#include#include#define LL long longusing namespa原创 2016-04-22 17:06:58 · 380 阅读 · 0 评论 -
leetcode动态规划之字符串切割成语句,单词都在字符串数组中
这道题直接递归会超时,需要先判断这条语句能不能切割再去递归,不会超时。class Solution {public: vector wordBreak(string s, unordered_set &dict) { vector ss; string result; int len=s.length(); if(len原创 2016-09-03 16:02:38 · 1434 阅读 · 0 评论 -
leetcode之网格从起点到终点的路径数之滚动数组
简单DP,滚动数组解决:class Solution {public: int uniquePaths(int m, int n) { vector f(n,0); f[0]=1; for(int i=0;i<m;i++) for(int j=0;j<n;j++) f[j]=f[j原创 2016-09-26 21:46:18 · 1014 阅读 · 0 评论 -
UVA116走格子求最短路
这题也是一个经典DP题,记住DP的最基本也是最简单的做法,就是开出一个数组记录求最佳解的过程中的各种情况的解,然后简单的DP题都是可以暴力递归的,首先想暴力递归,然后想能不能改成记忆化搜索,如果能改的话,如果想写简单些,就可以想一下能不能改成递推。至于这个题,能做出来表示很开心,虽然说是一道入门DP题,鉴于我就是刚刚入门DP,第一次没看题解,而且也不是白书上的很类似的题,虽然也敲了原创 2016-04-13 23:52:47 · 514 阅读 · 0 评论 -
UVA10003固定点切木棍,怎么切使得每次切之前的木棍长度总和最小
这题,刚开始想了很久没有想到怎么处理,其实如果想通了很简单的,用d[begin][end]表示从bigin切点到end切点,这段木棍的最省钱切法,然后就模拟切中间各点,计算交给递归下一层。。。没有后效性,记忆化搜索,子问题重叠,这三个是dp题目的基本要素。此题,刚好是一个经典的DP题,当然既可以用递推,也可以用记忆化搜索。有点像矩阵链乘问题,找到状态转移公式就好了dp[原创 2016-04-12 19:27:24 · 646 阅读 · 0 评论 -
UVA674硬币组合成固定数组的方法。
刚开始想到用递推,然后发现不对,就想起来用记忆化搜索,后来改了很多地方,貌似都没改到正确的地方,然后就看题解,递推其实就是把里外俩个循环调换一下,防止重复。记忆法搜索同理,或者保存下来,避免重复。递推代码:#include#include#include#include#include#include#include#include#include#include原创 2016-04-12 14:16:44 · 333 阅读 · 0 评论 -
编程之美回文字符串,DP
时间限制:2000ms单点时限:1000ms内存限制:256MB描述给定字符串,求它的回文子序列个数。回文子序列反转字符顺序后仍然与原序列相同。例如字符串aba中,回文子序列为"a", "a", "aa", "b", "aba",共5个。内容相同位置不同的子序列算不同的子序列。输入第一行一个整数T,表示数据组数。之后是T组数据,每组数据为一行字符转载 2015-04-18 21:13:27 · 804 阅读 · 0 评论 -
UVA LA3516,分支法加上递归和递推
此题采用的DP的思想,即分解为小的问题进行解决,然后又使用了递推和递归的思想,分析:设输入序列为S,d(i,j)为子序列Si,Si+1,...,Sj对应的树的个数,则边界条件是d(i,i)=1,且Si不等于Sj时d(i,j)=0(因为起点和终点应是同一点)。在其他情况下,设第一个分支在Sk时回到树根(必须有Si=Sk),则这个分支对应的访问序列是Si+1,...,Sk-1,方案数为d(i+1,翻译 2015-05-09 10:03:17 · 475 阅读 · 0 评论 -
uva11137递推和DP其实有些类似
这道题大白书上是按递推讲的:分析:建立多段图。节点(i,j)表示“使用不超过i的整数的立方,累加和为j”这个状态,设d(i,j)为从(0,0)到(i,j)的路径条数,则最终答案为d(21,n)(因为对于题目范围,22*22*22>n)。这个多段图的特点是每个结点一步只能走到下一个阶段的结点,因此我们可以一个阶段一个阶段的计算,代码如下。#include#include#in翻译 2015-05-06 20:41:23 · 505 阅读 · 0 评论 -
cf 474D
多么简单的dp题,多么容易想到的dp方程,然而我并没有想到,难道这就是智商问题,忧伤,题目意思:Marmot 吃两种类型的花(实在难以置信呀~~):red 或者 white,如果要吃到white这种花,就需要吃连续 k 朵 white;而如果吃 red,就没有这种限制。给定区间[a, b],问总共的吃法有多少种。 dp 题!状态转移方程不难得到。设 dp[i] 表示 长度为 i翻译 2015-05-20 21:18:07 · 519 阅读 · 0 评论 -
HDU5290树形DP一颗树扔炸弹几次能炸完
多校这些神题像我这种渣渣理解起来也是很难的,先贴下代码有能力的时候再去理解吧#include#include#include#include#define INF 100000000#define N 100010#define U 200010#define M 105using namespace std;int dp,p[U],pre[U],n,tt[U],a[N],i翻译 2015-07-25 08:45:59 · 1054 阅读 · 0 评论 -
HDU5291DPn堆糖果取出相等数目的糖果
#include#include#include#include#include#include#includeusing namespace std;#define mod 1000000007typedef long long lld;int s[2010];lld a[400010];lld dp[2][400010];void odd(i翻译 2015-07-25 08:47:49 · 900 阅读 · 0 评论 -
HDU5293树形DP取一棵树上不共点的任意个树枝
#pragma comment(linker, "/STACK:1024000000,1024000000")#include#include#include#include#include#include#include#include#include#include#include#include #include #define cl(a,b) memset翻译 2015-07-25 09:00:24 · 425 阅读 · 0 评论 -
UVA165连续邮资问题
这题由于大神题解写的比较详细,所以copy一下,原文链接:http://blog.csdn.net/shuangde800/article/details/7755452题目大意:某国家发行k种不同面值的邮票,并且规定每张信封上最多只能贴h张邮票。 公式n(h,k)表示用从k中面值的邮票中选择h张邮票,可以组成面额为连续的1,2,3,……n, n是能达到的最大面值之和。例如当h=3,k原创 2015-10-02 22:12:31 · 645 阅读 · 0 评论 -
CF582B一个数列重复n次求非递减序列
其实感觉这道题如果想的话也许比前面那道题还简单一些,一个简单DP,其实简单的DP就是贪心,首先这道题如果t所以这里面毕竟有重复,这个重复就是找出数字最多那个数字,然后重复t-n次,然后和n以内的最长的非递减序列相加就行了,具体的看代码:#include #include #include #include #include #include #include#incl原创 2015-10-05 18:20:52 · 804 阅读 · 0 评论 -
HDU5459字符串斐波那契之递推
这题起初以为是一个找规律题,然后就各种打表找规律,然而最后发现并不能找到什么规律,其实是一个递推题目,主要就是看你能不能想到怎么取递推:题目所求所有C之间的距离,又因为相加的性质,两边的单独处理是不变的,每次拼接之后多出来的只是两边各一个的情况,有了点分治的味道。而左右两边的情况则不妨将这段距离差分成x,y两部分分开计算。对于左串来说,每一个C都要和右串所有的C进行一次配对,所计算的距原创 2015-09-21 19:37:13 · 977 阅读 · 0 评论 -
HDU5501贪心加DP零一背包
这题比赛的时候有想到是DP题,但是DP有研究的少就没有去往那里想,想用其他办法做,然而并不能,写了一发暴搜,果断T,各种加剪枝,T了四发,并没有过,还是DP。题解写的很详细了,我就不多说了。题解:这道题考察的是贪心思想和动态规划。首先我们考虑,假如我们已经确定了要做哪些题目,按什么顺序做这些题目最好。假设已经确定了要做其中的mm道题,某一个方案中做题的顺序是原创 2015-10-11 20:22:02 · 596 阅读 · 0 评论 -
leetcode动态规划之连续最大子序列和
很经典的题目,当然以前做过,这是我写的代码,好像不够简洁,后面给个更简洁的:class Solution {public: int maxSubArray(int A[], int n) { int flag=INT_MIN; int sum=0; int Max=0; for(int i=0;i<n;i++){原创 2016-09-26 22:00:38 · 740 阅读 · 0 评论