动态规划
文章平均质量分 70
Falling~
这个作者很懒,什么都没留下…
展开
-
动态规划--免费馅饼
第一次自己完全独立写出的动态规划,一定要纪念下。由数塔引出。数塔:处于一个端点,每次可以选择向左或向右。而每次原创 2017-06-16 21:14:08 · 308 阅读 · 0 评论 -
动态规划---最长公共子序列
最长公共子序列原创 2017-04-12 11:39:54 · 175 阅读 · 0 评论 -
背包九讲
P01: 01背包问题 题目 有N件物品和一个容量为V的背包。第i件物品的费用是c[i],价值是w[i]。求解将哪些物品装入背包可使这些物品的费用总和不超过背包容量,且价值总和最大。 基本思路 这是最基础的背包问题,特点是:每种物品仅有一件,可以选择放或不放。 用子问题定义状态:即f[i][v]表示前i件物品恰放入一个容量为v的背包可以获得的最大价值。则其状态转移方转载 2017-04-09 11:21:44 · 221 阅读 · 0 评论 -
动态规划--背包计数--hdu2079选课时间
#include #include #include using namespacestd;const int maxn =45;const int maxk =10;int g[maxn];int a[maxk],b[maxk];int main(){ int T; cin原创 2017-07-24 16:23:57 · 509 阅读 · 0 评论 -
动态规划--最长上升子序列LIS
1.记录以Ak结尾的最长增长子序列的长度 O(n^2)#include #include #include using namespace std;const int maxn =1005;int num[maxn];int maxlen[maxn];int main(){ int n;原创 2017-06-17 21:02:09 · 340 阅读 · 0 评论 -
dp--codeforces 687c The Values You Can Make
给定n个硬币及面值,求从能凑成sk的硬币中,能凑成什么面值dp[ i ][ j ][ k ] 表示前i个硬币,能凑成面值为j的硬币中,能否凑成面值k#include #include using namespace std;const int maxn =500 + 5;bool dp[2][maxn][maxn];int v[max原创 2018-02-01 20:06:10 · 213 阅读 · 0 评论 -
完全背包+记录路径
给定面值v,n种硬币,硬币面值为f1..fn求凑成v所需要的硬币数,且优先使用小面值的硬币。#include #include #include using namespace std;const int maxn =12;const int maxv =2000 + 5;const int INF =0x3f3f3f原创 2018-01-27 14:58:40 · 1335 阅读 · 0 评论 -
dp--记忆化搜索--cf917b MADMAX
给定一张有向无回图,Max和Lucas执石子在图上走。Max走奇数轮,每个人下一步经过的边上的字母,都要比上一轮的大。无法再走的时候,就输了。如果Max,Lucas分别在i,j时,Max会赢就输出A,否则B。记忆化搜索。#include #include #include #include using namesp转载 2018-01-30 11:23:25 · 230 阅读 · 0 评论 -
动态规划---编辑距离
对于两个不同的字符串,我们有一套操作方法来把他们变得相同,具体方法为:修改一个字符(如把“a”替换为“b”)删除一个字符(如把“traveling”变为“travelng”)比如对于“abcdefg”和“abcdef”两个字符串来说,我们认为可以通过增加/减少一个“g”的方式来达到目的。无论增加还是减少“g”,我们都仅仅需要一次操作。我们把这个操作所需要的次数定义为两个字符串的距离转载 2017-04-12 13:13:46 · 598 阅读 · 0 评论 -
动态规划--uva1025 城市里的间谍
影响决策的因素有当前时间t和所处车站,所以dp[t][n],2维。求等待最短时间,即dp[t][n]决策有3个,等待1分钟,向右坐火车,向左坐火车。#include #include #include using namespacestd;const int maxn =255;const int INF =1原创 2017-05-21 16:35:21 · 286 阅读 · 0 评论 -
动态规划--打地鼠
假设: 1、每一个时刻我们只能打一只地鼠,并且打完以后该时刻出现的所有地鼠都会立刻消失; 2、老鼠出现的位置在一条直线上,如果上一个时刻我们在x1位置打地鼠,下一个时刻我们在x2位置打地鼠,那么,此时我们消耗的能量为abs( x1 - x2 ); 3、打第一只地鼠无能量消耗。现在,我们知道每个时刻所有冒出地面的地鼠位置,若在每个时刻都要打到一只地鼠,请计算最小需要消耗多少能量原创 2017-06-17 01:27:41 · 1224 阅读 · 0 评论 -
动态规划--装满背包的最小价值--hdu1114 Piggy-bank
给定存钱罐重量f - e,n种硬币的价值p,重量w。求里面最少有多少钱。1.最少价值,全部初始化为inf,dp[0] = 0,转移的时候求min2.装满背包,看dp[f - e] 是否仍为inf,是的话,说明背包不满。#include #include #include using namespacestd;const int m原创 2017-07-28 10:22:44 · 1600 阅读 · 0 评论 -
动态规划--多重背包--hdu2844 coins
01背包:每种物体只有1个,可选择取或不取完全背包:每种物体有无数个(当每种物体 重量w * 个数 c >= 背包容量 V 时,可视为完全背包)多重背包:每种物体有c[ i ]个将个数c拆分成1,2,4,...,2^(k - 1),c - (2 ^ k - 1)拆分为二进制则可表示1到c任意的数字。while ( int x) //x为该种物品的总个数{int t =原创 2017-07-17 17:58:18 · 362 阅读 · 0 评论 -
动态规划--hdu1241搬寝室
一共n间物品,每次搬2个,一共搬k次,疲劳度为每次2个物品重量差的平方和,求最小疲劳度。1.a 可证,(a - b) ^ 2 + (c - d) ^ 2 (a - b) ^ 2 + (c - d) ^ 2 所以每次取相邻的更小2.由 1 4 5 8这组数据可知,不能贪心3.递推 设dp[ i ][ j ]为从前i个中取j对物品的最小疲劳度,则若取第i个,因为要取相邻的,原创 2017-07-15 10:04:21 · 279 阅读 · 0 评论 -
动态规划--二维费用背包--最大最小价值--hdu4968 Improving the GPA
给定平均分和科目数,求可能的最低绩点和最高绩点。容量为sum,41件物品(60-100分),完全背包。费用为件数的1,和所需要的分数。价值是绩点。#include #include #include #include #include using namespacestd;const int maxn =4原创 2017-07-21 16:07:32 · 425 阅读 · 0 评论 -
动态规划--至少取一个的分组背包--hdu3033 I love sneakers!
n个物品,m元钱,k种种类。求每个种类至少取一个物品,所能得到的最大价值。分类里互斥的分组背包,每种类别最多取一个。for all 组kfor u = V to 0for i 属于kdp[ k ][ u ] = max( dp[ k - 1 ][ u ], dp[ k ][ u - c[ i ] ] + v[ i ]);//k - 1这项说明对于k组的物品可以一个都转载 2017-07-21 10:46:38 · 454 阅读 · 0 评论 -
动态规划--分组背包--hdu4341 Gold miner
n块金子,T单位时间。每块金子给出x,y坐标,得到需要的时间t,价值v。在(0,0)位置取,共线的金子,必须按顺序,先取离原点近的。可以整体排序,按斜率分组,在同一组里,按远近排序,计算前缀和。比如1 2 3 ,变成 1 3 6,即取1块,取前2块,或取3块。注意斜率用 x * a.y ?= y * a.x比较,而不是相除。#include #inc原创 2017-07-20 20:16:51 · 285 阅读 · 0 评论 -
动态规划--dp--2018年东北农业大学春季校赛J
链接:https://www.nowcoder.com/acm/contest/93/J来源:牛客网我国现在能源消耗非常严重,现在政府有这样一个工作,每天早上都需要把一些路灯关掉,但是他们想让在关闭的过程中所消耗的能源是最少的,负责路灯关闭的工作人员以1m/s的速度进行行走,假设关闭路灯的时候不需要花费任何的时间,请你编写一个程序,计算在给定路灯位置和每个路灯的消耗能源的多少,求出当所原创 2018-04-06 02:49:01 · 345 阅读 · 1 评论