DP
qq_19275839
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
POJ 1015 Jury Compromise
题意:从n个陪审员中选出m个,每个陪审员有控诉和辩护两个属性,要求两个属性和的差值最小,在这种情况下,总值最大(为了保证法庭的精彩??)。 dp[i][j]表示选到第i个陪审员的时候,差值为[j]时,最大的总值。用path[i][j]记录选择了哪个。 注意pos与i的关系。 #include <iostream> #include <stdio.h> #include &l...原创 2019-08-26 20:15:36 · 177 阅读 · 0 评论 -
POJ 3186 Treats for the Cows 区间dp
题目中要求我们从中间往两边选,我们可以换一种思考方式,改为从中间往两边选,比如第a次我们选择了第b个,那我们的收入就增加了(n - len) * value[b],len为已经选取的区间长度。 我们用dp[i][j]表示选取i~j区间获得的最大价值,它可以由dp[i+1][j]或者dp[i][j-1]转化而来(就是最后一个选i还是选j),转移方程如下 dp[i][j] = max(dp[i+1][...原创 2019-08-22 19:13:28 · 149 阅读 · 0 评论 -
POJ 3666 DP
首先,这道题的数据特别水,我们主要写验证他不严格升序的代码即可。 通过分析我们能够发现,影响前i个数所用的总消耗只收前i-1个数的总消耗与第i-1个数的高度相关,所以我们可以用二维数组dp[i][j]表示使得前i个数不严格递增,并且最大高度为j所用的花费。 再分析,在计算dp[i][j]的时候,第i个数字的大小一定是j,所以我们只需要在dp[i-1][0]到dp[i-1][j]中取最小的一个即可,...原创 2019-08-20 20:09:26 · 201 阅读 · 0 评论 -
HDU 1074 状态压缩dp
把所有作业做与没做的状态压缩为1与0,这样我们就可以用一个小于2n的数字来表示任意作业做与没做的状态。很显然,所有作业全做完了的状态一定是由某一科没做完演变而来,即111肯定是由011,101,110三个状态之一演变而来,我们只需要找出这三种状态,逐个比较得出减分最少的一个路径即可。 #include <iostream> #include <stdio.h> #inclu...原创 2019-08-19 21:13:20 · 127 阅读 · 0 评论 -
Codeforces 1000D dp
注意对题意的理解,对于给出的序列,我们需要找出他满足要求的子序列,然后对于每个子序列,再把它分成几个满足要求的子串 。 对于任意一个元素i,我们需要至少往后面走a[i]位,然后从i+a[i]+1开始直到结尾,以这些开头的子序列都可以和i开头的子序列连在一起,对于一个j,以i开头,长度为a[i]+1的子序列可以选出C[j-i-1][a[i]]种,所以要用组合数乘上dp[j],再把对于每个j的值加到一...原创 2019-08-06 15:50:07 · 219 阅读 · 0 评论 -
HihoCoder 1469 dp
一道不太明显的dp,dp[i][j]的含义是,以i,j为右下角的福字的大小。 首先进行预处理,两个二维数组。shang[i][j]表示从坐标ij的元素开始向上寻找,能找到多少个元素使他们都满足map[i-1][j] + 1 == map[i][j],比如这个 1 2 3 2 3 4 3 5 5 他的shang数组就是 1 1 1 2 2 2 3 3 3 同理,再构建一个左数组。 然后我们就可以...原创 2019-08-07 20:52:34 · 197 阅读 · 0 评论 -
HihoCoder 1754数位dp
把c转化成二进制数,然后数位dp即可。 #include <iostream> #include <algorithm> #include <string> #include <stdio.h> #include <cstdlib> #include <math.h> #include <cstring> #inc...原创 2019-08-10 13:17:38 · 145 阅读 · 0 评论
分享