动态规划
摩霄志在潜修羽
骐骥一跃,不能十步。驽马十驾,功在不舍。
展开
-
动态规划--01背包与完全背包
这两天学习了01背包与完全背包,经过无数次百度之后,总算明白了一些其中的原理,记录一下。01背包问题:描述:假设小偷去珠宝店盗窃,他的背包容量为C=10,珠宝店里有3件珠宝可以盗窃,他们分别对应: 问可以装入背包的最大价值是多少。求解:想要求装入背包的最大价值,肯定要在尽量装满背包的情况下拿价值尽可能高的物品,使得最后的总价值最大化。这便要求局部最优解,分解子问题,自然而...原创 2018-08-10 14:04:38 · 5839 阅读 · 0 评论 -
HDU 动态规划(46道)
动态规划需要疯狂刷题才能理解深意,这里贴上找到的HDU动归46题,希望自己能全部刷完!原博地址:http://www.cppblog.com/doer-xee/archive/2010/01/28/102629.html#Post动归46题:Robberies http://acm.hdu.edu.cn/showproblem.php?pid=2955背包;第一次做的时候把概率当做背包(放...转载 2018-09-30 19:36:22 · 300 阅读 · 0 评论 -
杭电1159--Common Subsequence
题目描述:解析:经典dp问题,求最长递增子序列。用dp[i][j]表示以str1第i个元素、str2第j个元素结尾的最长递增子序列的长度,对于输入的两个字符串,依次遍历。分两种情况讨论:(1)如果str1的第i个元素和str2的第j个元素相等,那么最长递增子序列的长度就等于str[i-1]和str[j-1]结尾的长度。(2)如果不等,那么最长递增子序列又分两种情况:a.str[i-1]及...原创 2018-10-03 16:40:10 · 235 阅读 · 0 评论 -
hdu2845--beans
Problem DescriptionBean-eating is an interesting game, everyone owns an MN matrix, which is filled with different qualities beans. Meantime, there is only one bean in any 11 grid. Now you want to eat...原创 2018-10-02 15:46:07 · 212 阅读 · 0 评论 -
杭电2571--命运
题目描述:解析:这是典型的动态规划题,一个点可以由三个不同的点推导而来,具体见图:(据说可以用记忆化搜索之类,可是我还没学…)状态转移方程很简单就可以列出来,我把题目给的样例带进去发现也没啥问题,结果WA了…对比网上代码,我发现了问题症结所在:循环下标从1开始,初始的dp[0][n]和dp[m][0]我全都给赋了初始值0,但是第一排就很可能出现负值,这就导致了对下标为0的dp进行使用...原创 2018-09-25 18:38:28 · 167 阅读 · 0 评论 -
杭电2844--Coins
题目描述: 解析: 知道这是完全背包问题,但是初做这道题时我还是不知道用什么作为背包容量,而通过分析这道题发现,题目所求是价值不超过m的方案的个数。对于(1–m)内的任意一个价值,如果最佳方案dp[i]达到了这个值,那么就可以说存在这种方案。因此建立如下转移方程: dp[i][j]=max{dp[i-1][j],dp[i-1][j-v[i]]+v[i]} 其中dp[i][j]表示的是装...原创 2018-09-07 14:27:06 · 263 阅读 · 0 评论 -
【转】《背包九讲》--崔添翼大神
背包九讲目录 第一讲 01背包问题 第二讲 完全背包问题 第三讲 多重背包问题 第四讲 混合三种背包问题 第五讲 二维费用的背包问题 第六讲 分组的背包问题 第七讲 有依赖的背包问题 第八讲 泛化物品 第九讲 背包问题问法的变化 附:USACO中的背包问题 前言 本篇文章是我(dd_engi)正在进行中的一个雄心勃勃的写作计划的一部分,这个计划的...转载 2018-09-06 20:21:35 · 4381 阅读 · 0 评论 -
杭电2159--FATE
题目描述: 解析: 这道题是很明显的完全背包问题,所不同的是在背包容量限制的基础上限定了最多可以拿取的物品数量。最开始做的时候不知道新增的限制条件怎么使用,参考了网上的代码,写一下思路: 既然新增了一条限制,也就是要保证拿取的数量要小于限制的数量,那么可以对原有的数组新增加一个维度:状态设计:dp[z][j]表示杀z个怪且花费不超过j的情况下得到的最大经验值 状态转移方程:dp[z...原创 2018-09-05 21:31:25 · 241 阅读 · 0 评论 -
杭电1087--Super Jumping
题目描述: 解析: 很水的一道题,就是把最长递增子序列的长度变为了最长递增子序列的和,让dp[i]来表示以a[i]结尾的最长子序列的和就好了。 递推公式: dp[i]=max{dp[i],dp[j]+a[i]} 不过需要注意的一点是,此处外层循环的下标就要从1而不是2开始了,因为也需要计算dp[1]的值。 代码://杭电1087#include<stdio.h>...原创 2018-09-08 18:44:03 · 319 阅读 · 0 评论 -
杭电1003--Max Sum
题目描述: 解析: 这道题求的是连续子序列的和的最大值,联想到最长递增子序列,不妨用动态规划的想法去做。 我们假设原始序列的元素为a[n],dp[i]为以第i个元素为结尾的子序列的最大值,那么通过一趟遍历,依次比较以第i个元素为结尾的子序列的最大值即可。 举例说明,一个序列如下: 通过分析不难发现,以第i个元素为结尾的子序列的最大值存在两种情况: (1)既然是连续的子序列,那么...原创 2018-09-08 17:52:02 · 211 阅读 · 0 评论 -
杭电2059--龟兔赛跑
题目描述: 解析: 使用动态规划思想建立模型,开始以为自己对动态规划已经很熟练了,做了这道题才发现,呵呵~还是得练! 废话不多说,这道题的思想如下: 想要求乌龟与兔子谁先到达终点,其实就是拿乌龟到达终点的最快速度与兔子的相比,因此我们设乌龟到达某一点最快的时间为dp[n],对于每过一个点,存在充电与不充电两种情况,因此我最初的想法是比较充电与不充电这两种情况的最短时间,作为dp[i]。...原创 2018-09-11 16:13:50 · 377 阅读 · 0 评论 -
最长递增子序列与最长公共子序列
最长递增子序列:我们不知道最长递增子序列的最后一个元素出现在什么位置上,因此,需要依次比较各个元素的最长递增子序列的大小(如果给定的序列完全逆序的话,那么以任意元素结尾的最长递增子序列长度均为1,故也需要比较全部)。根据动态规划问题的思想,一个大的问题可以拆分小问题去解决,对于每个小问题,也可以拆分成更小的问题(大事化小,小事化了)。 假设序列元素为a[n],dp[n]为以a[n]结尾的最长...原创 2018-09-07 20:14:27 · 303 阅读 · 1 评论 -
杭电2084--数塔问题
十多天没被acm虐了,有点手痒,把之前做过的动规数塔题重新看了一遍,写一下心得。 题目描述: 解析: 一般的想法:首先,我们可以试一下使用传统的遍历。既然求经过结点的数字之和的MAX,不妨将所有情况列出,最后比较各数字和的大小即可,这样的方法显然超时,因为在计算不同的分支时,存在大量不必要的重复计算,例如在进行最后一层的计算时,有两种路径: (1)9+12+10+2+19 ...原创 2018-09-04 16:19:40 · 234 阅读 · 0 评论 -
杭电1203-- I NEED A OFFER!
题目描述: 思路: 这道题与2955思想相同,只不过更直观:求不被录取的最小概率。 代码:#include<stdio.h>#include<string.h>#define MAXN 10005float MIN(float a,float b){ return a<b?a:b;}int main(){ int i,j...原创 2018-08-13 22:04:01 · 351 阅读 · 0 评论 -
杭电2955--Robberies
此题大坑 我以概率乘以100作背包容量,以所得价值为价值,很快写出了代码,然而WA了! 错误代码:#include<stdio.h>#include<string.h>int MAX(int a,int b){ return a>b?a:b;}int main(){ int n,m,i,t,j,max2; int val...原创 2018-08-13 20:28:20 · 223 阅读 · 0 评论 -
杭电1171--Big Event in HDU
水题,下标越界害我RE无数次,下次再也不为了节省减少数组空间了。。。 这题贵在锻炼灵活思路,因为A>=B,实际上就是求在(总价值/2)的情况下最大的价值(B的),再用总价值减去这个就是A的了。#include<stdio.h>#include<string.h>int MAX(int a,int b){ return a>b?a:b;}...原创 2018-08-14 10:18:29 · 151 阅读 · 0 评论 -
杭电1257--最少拦截系统
题目描述:解析:这道题的题意容易让人产生误解,正确的解析–举个例子:输入:67 3 5 1 2 1那么就需要两套反导系统,分别是:7 3 2 1 和 5 1这道题的本质其实可以理解为最长上升子序列问题,引用一段话说明转化的思想:这道题让求最少的拦截装置,由题意知,当导弹高度递减时,可以用一套装置拦截。我们可以换种思路想一下,当什么情况下需要增加拦截装置,当后面一个数比前面某...原创 2018-10-09 19:08:43 · 283 阅读 · 0 评论