
DP学习
文章平均质量分 61
h4ms7er
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
洛谷OJ: P1049装箱问题(01背包问题)
思路:其实还是求背包最多能装多少东西,状态转移方程dp[i] = max{dp[i], dp[i-w[j] + v[j]}, 在这一题中w和v是相同的#include <cstdio>#include <iostream>using namespace std;const int maxn = 20000+10;int N, W, dp[maxn], temp;...原创 2018-04-14 12:36:16 · 393 阅读 · 0 评论 -
洛谷OJ: P1005 矩阵取数游戏
今天因为高数模拟考没怎么做题,就睡前做了这么一题,舍友也开始一起在洛谷刷题了,很开心,但是高数只考了63,很不开心,心情复杂。思路:每一行都是独立的选择,不要因为有多行而被带到错误的思考方向,所以我们开始分析独立的一行数据,那么只有两种选择,1.选择最开头的数字 2.选择最末尾的数字, 而每次增加的分数都是2^i*选择的数字,那么我们稍加思考就可以得到状态转移方程啦。首先,我们定义dp[i][j]...原创 2018-04-16 01:46:34 · 419 阅读 · 1 评论 -
洛谷OJ: P1220 关路灯(DP)
刚看完题目的时候感觉这很容易嘛,不就向左向右两种转移方式,于是直接就写出了动态转移方程,dp[i][j]表示关闭i~j区间内所有灯的最小消耗,dp[i][j] = min{dp[i-1][j]+dis(i,i-1)*w(i-1,j), dp[i][j+1]+dis(j+1,j)*w(i-1,j)}。后来写出来代码发现不对,思考了一会以后发现没有考虑此时人的位置在哪里,需要多加一种状态。之后得到了如...原创 2018-04-16 03:08:14 · 350 阅读 · 0 评论 -
洛谷OJ: P1156 垃圾陷阱(DP)
昨天五点才睡导致今天状态太差了,所以三个小时才勉强做出来这题,哎,还是得早睡早起呀思路:首先来分析一下一个时刻有几种状态,1.时间 2.生命值 3.垃圾高度 4.剩余垃圾数,难道要开一个三维数组来记录吗?当然是不可能的,通过思考,我们发现时间和剩余垃圾数是有关联的,因为题目告诉我们垃圾是按顺序丢的,所以可以通过记录剩余垃圾数来得到时间,那么我们只需要记录三个状态,也就只需要开一个二维数组,首先我们...原创 2018-04-16 23:20:39 · 326 阅读 · 0 评论 -
洛谷OJ: P2347 砝码称重
思路:一道多重背包题,之前学习背包问题的时候了解到多重背包可以转换成01背包来做,但是可以通过二进制的思想来优化它,比如13可以拆分成2^0,2^1,2^2,6,这四个数组合可以得到1~13之间的任意整数,那么就把13个物品成功转化为了4个物品,那么这题也是一样的,将a1的个数拆分为2^0,2^1,...,之后当作一道01背包来做#include <iostream>#include...原创 2018-04-16 23:30:21 · 655 阅读 · 0 评论 -
洛谷OJ: P1373 小a和uim之大逃离
思路:首先给小uim改个名,叫他小b好了,那么我们定义dp[i][j][k][0/1]为,在i,j点,小a小b的魔瓶差值为k,0代表小a吸收了这一格的魔液,1则是小b吸收了这一格的魔液,有几种方法到达这种状态。这个k坑了我好久。。由于小a与小b两者魔瓶的差值可以为k,可是当k模k的时候得数却是0,所以我们得让k加1,开始数组开小了也WA了好几次。通过定义的dp数组我们可以得到递推式1.dp[i][...原创 2018-04-16 23:52:47 · 233 阅读 · 0 评论 -
洛谷OJ: P1417 烹调方案
思路: 分析后就是一道01背包题,但如果按普通的01背包题直接进行DP的话只能拿到35分,我们来分析一下为什么。举个例子,如果先使用了第一个物品,那么第二个物品的价值就会随之减小,但如果正确答案是先选第二个物品的后选第一个物品的话,那么得到的结果肯定就是错的,那么我们该如何选取物品呢?先将例子种式子列出来ans1 = a1-b1*(p+c1)+a2-b2*(p+c1+c2)ans2 = a2-b2...原创 2018-04-17 23:54:14 · 301 阅读 · 0 评论 -
洛谷OJ:P1135 奇怪的电梯
这题有三种解法,1.搜索 2.最短路 3.DP1.直接写个DFS就行了#include <iostream>#include <cstdio>using namespace std;const int maxn = 200+10, inf = 0x3f3f3f3f;int k[maxn], ans = inf;bool vis[maxn];int n, a, ...原创 2018-04-18 16:33:10 · 371 阅读 · 0 评论 -
洛谷OJ : P1060 开心的金明(01背包问题)
我最薄弱的方面就是DP了,之前一直很害怕DP,从今天开始就攻一攻DP吧,先把以前做的复习一遍分析: 可以说这是我做的第一道DP题了,经典的01背包问题,递推式为dp[j] = max{dp[j], dp[j-w_[i]]+v_[i]};这一题的w_[i]就是v[i],而v_[i]就是p[i]*v[i]/** * 题目: P1060 开心的金明 * 类型: 01背包问题 *...原创 2018-04-14 01:30:24 · 296 阅读 · 0 评论 -
洛谷OJ: P1006 传纸条
思路:开始看到这题的时候无从下手,于是就在纸上试着画出路线,看看有没有什么规律,画着画着发现在画完路线的图上每一条从右上到左下的斜线都只用到了两个同学,并且在斜线上一条线路永远在另一条线路的右上方,因为做n皇后问题的时候有利用过这种斜线,于是就想以这个作为突破口写出状态转移方程,思考了有一个小时吧...最后才得到了状态转移方程首先我们定义dp[k][i][j]的意义为横纵坐标为k的斜线上, 在下面...原创 2018-04-15 04:50:04 · 459 阅读 · 0 评论 -
洛谷OJ: P1387 最大正方形(DP)
思路,只有当↖←↑这三个方向都是1时才能组成正方体,所以就能直接得到状态转移方程啦dp[i][j] = min{dp[i-1][j-1], dp[i][j-1], dp[i-1][j]} + 1 (dp[i][j] != 0)/** * 题目: 洛谷OJ P1387 最大正方形 * 题型: DP **/#include <cstdio>#include <iostrea...原创 2018-04-15 03:10:07 · 512 阅读 · 0 评论 -
洛谷OJ: P1508 Likecloud-吃、吃、吃
思路:一题非常直观的DP,直接就可以列出动态转移方程dp[i][j] = dp[i][j] + max{dp[i-1][j-1], dp[i-1][j], dp[i-1][j+1]};即向左前方走,向前走,向右前方走说来和校OJ那题走运的zzz简直一模一样呢,不过这题有个坑点就是"每组数据的出发点都是最后一行的中间位置的下方!",所以最后的答案应该是最下面一行最中间的三格中最大的那个值/** *...原创 2018-04-15 02:47:37 · 386 阅读 · 0 评论 -
洛谷OJ: P1616 疯狂的采药(完全背包问题)
分析: 和01背包的不同之处就在于第二个循环,01背包是从后向前推,无法从后面的状态中获得收益,但是完全背包可以选很多个,就可以从前向后推,进而从之前的状态中获取收益,状态转移方程dp[i] = max{dp[i], dp[i-w[i]] + v[i]},这一题的w是时间t#include <cstdio>#include <iostream>using namespa...原创 2018-04-14 12:44:16 · 460 阅读 · 0 评论 -
洛谷OJ: P1048 采药 (01背包问题)
分析: 动态转移方程dp[i] = max{dp[i], dp[i-w[i]] - v[i]}/** * 题目: 洛谷OJ P1048 采药 * 题型: 01背包 **/#include <cstdio>#include <iostream>using namespace std;const int maxn = 1000+10;int N, W, d...原创 2018-04-14 12:54:59 · 507 阅读 · 0 评论 -
洛谷OJ: P1064 金明的预算方案(01背包问题)
思路: 这是一道01背包问题, 只有选与不选的这两种情况, 但是这题物品的属性比起普通的01背包只有重量和价值以外多了主件/附件这一属性, 再看题目中"每个主件可以有0个、1个或2个附件"这一句话,一种物品的所有选择情况只有:1.只选择主件 2.选择主件+附件1 3.只选择主件和附件2 4.选择主件和所有附件, 那么我们很容易就能得到状态转移方程dp[i]= max{dp[i], dp[i-...原创 2018-04-14 16:20:47 · 356 阅读 · 0 评论 -
洛谷OJ: P1020 导弹拦截(LIS)
思路:Problem1: 第一个问题就是求最长不上升子序列长度Problem2: 第二个问题看上去有些难, 但是通过组合数学中的"Dilworth定理"可以知道"最少的下降序列个数就等于整个序列最长上升子序列的长度", 所以第二个问题就是求最长上升子序列长度/** * 题目: 洛谷OJ P1020 导弹拦截 * 题型: DP **/#include <cstdio>#inc...原创 2018-04-14 17:27:41 · 445 阅读 · 0 评论 -
洛谷OJ: P1091 合唱队形(LIS)
思路:求出以每个人结尾的最长上升子序列以及以每个人开头的最长下降子序列即可/** * 题目: 洛谷OJ P1091 合唱队形 * 题型: DP **/#include <cstdio>#include <iostream>using namespace std;const int maxn = 100+10;int dp1[maxn], dp2[maxn]...原创 2018-04-14 19:14:54 · 332 阅读 · 0 评论 -
洛谷OJ:P1880 [NOI1995]石子合并(DP)
思路:首先来分析一下题目,“在一个圆形圆形操场”告诉我们石头是按环状摆放的,也就是说头尾也可以合并,这个容易解决,我们将数组扩大一倍即可。之后思考动态转移方程怎么写,合并一组石子首先要将这一组石子中的每一堆石子两两合并,那么我们很容易就可以得到动态转移方程Problem1:dp[i][j] = min{k|dp[i][j], dp[i][k]+dp[k+1][j]+w(i, j)}Problem2...原创 2018-04-15 01:10:06 · 370 阅读 · 0 评论 -
洛谷OJ: P1140 相似基因(DP)
思路:仍然是一道简单的DP,首先我们来分析一下有几种策略可以选择1.令第一条链的碱基与空碱基配对2.令第二条链的碱基与空碱基配对3.令两条链的碱基相互配对那么我们很容易就能够得到状态转移方程了,dp[i][j]表示第一条链的1~i部分与第二条链的1~j部分的最大匹配值dp[i][j] = max{dp[i][j], dp[i-1][j]+a[i]与空碱基的匹配值, dp[i][j-1]+b[j]与...原创 2018-04-15 01:55:55 · 626 阅读 · 0 评论 -
洛谷OJ:P1855 榨取kkksc03(DP)
思路:还是一道01背包,不过有了两个属性而已/** * 题目: 洛谷OJ:P1855 榨取kkksc03 * 题型: DP **/#include <cstdio>#include <cstring>#include <iostream>using namespace std;const int maxn = 200+10;int dp[ma...原创 2018-04-15 02:15:28 · 296 阅读 · 0 评论 -
洛谷OJ: P1164 小A点菜(01背包问题)
我最薄弱的方面就是DP了,之前一直很害怕DP,从今天开始就攻一攻DP吧,先把以前做的复习一遍分析: 1.如果当前的余额i恰好能够点这道菜,那么金额为i时的点菜方式增加1 2.如果当前的余额i点完这道菜还有剩余,那么金额为i时的点菜方式增加不点这道菜时的方式所以得到递推式dp[j] = 1.dp[j]+1 (j=temp) 2.dp[j] + dp[j-temp] (j > t...原创 2018-04-14 01:49:01 · 354 阅读 · 0 评论