dp思维
Anxdada
多读书多看报, 少吃零食多睡觉
展开
-
百练 2766 最大子矩阵 【思维 + dp思想】
传送门 //题意就不多说了. //思想:既然是矩阵, 那么是对称的. 所以我们可以把一个二维的看成两行的数相加,压成一维的, 那么要找最大的矩阵和, 其实就是在一维中找最大连续和. 这样出来的答案就是我们要的. 所以枚举出每一种可能O(n^3)的复杂度. 注意res的初始值不要赋0, 因为最后答案可能是负数./** @Cain*/const int maxn=1e2+5;int a[maxn原创 2017-08-12 00:17:21 · 468 阅读 · 0 评论 -
扔鸡蛋问题的改编(鸡蛋个数确定)
最经典的问题. 就是有n层楼, 但是鸡蛋个数是定的, 问最坏的情况下要测多少次.这篇博文讲的非常好, 原理以及解法. 传送门n 为楼层. // 两个鸡蛋是: k*(k+1)/2 >= n;// 三个: (k^3+5*k)/6 >= n; // …….// 再多也只能用dp来解了…..原创 2018-02-02 13:37:23 · 418 阅读 · 0 评论 -
Gym 100935H Bend Test and POJ 3783 Balls【经典的扔鸡蛋问题 + dp】
传送门 // 这道题就是最经典的扔鸡蛋问题, 也是一道经典dp问题. 问i个鸡蛋测j层楼最坏的情况下最少扔几次.我们设dp[i][j] 表示有i个鸡蛋测j层楼满足条件的方案数, 首先枚举测的楼层, 然后考虑其中的每一层楼k, 如果在第k层楼碎了, 那么我们就必须要用i-1个鸡蛋去测k-1层楼, 如果没碎, 那么就是用i个鸡蛋去测j-k层楼, 然后取这这两种情况的max是因为要是最坏的情况, ...原创 2018-01-19 13:03:09 · 702 阅读 · 0 评论 -
Wannafly 挑战赛 12 A, C题解 【dp题】
传送门 A: 中文题就不说题意了, 这个一眼背包啊, 但是纠结在这个利率是加上面, 然后一直过不了样例, 知道我换成了乘, 这个银行利率还是不会算啊…….. 直接完全背包即可.AC Codedb dp[maxn], r[10];void solve(){ int n; cin >> n; for (int i = 1 ; i <= 5 ; i ++) { if原创 2018-03-24 20:51:58 · 205 阅读 · 0 评论 -
经典dp问题 矩阵取数以及变形
再次总结一些比较经典的在矩阵中确定一个起始状态和结束状态, 问从起始到结束中走过的数要得到, 问最小(大), 路径输出等问题. 这些问题都可以转化为dp模型来解决. 下面以一些我做过的题进行分析.入门级: 51Nod - 1083 问题: 给定一个二维矩阵, 问从左上角走到右下角可以取到的最大值是多少. 每次只能往下或者往右走. 这道题就非常简单了, dp[i][j] 代表走到(i, j)这个点原创 2018-04-15 22:13:40 · 597 阅读 · 0 评论 -
整数划分问题 【经典DP】
相关题目1 相关题目2 相关题目3下面的描述大部分借鉴于(https://blog.csdn.net/Lin_disguiser/article/details/50574818), 感谢, 但是其中有部分错误, 我会在下面的描述中纠正过来…总的解决方法时截边法, 也就是去讨论有1无1的情况和截去他们的情况….. 记住了.一 求将n划分为若干正整数之和的划分数1. 若划分的多个...原创 2018-03-28 21:07:35 · 408 阅读 · 0 评论 -
西南科技大学院赛 F题 上决╇ф人员分配问题 【经典dp问题: 数组分割问题】
传送门 题意: 好像面试题就有这道题? 就是给定2*n个人, 每个人有一个值, 要你分成两堆, 并且要这两堆的值相加的差值要尽量的小, 问这个最小差值是多少.思路: 还是很经典的一个dp, 那就是dp[i][j][k] 表示前i个人中选min(i, n)个人能否组合出 值为 k 的组法. 所以很明显对于当前这个值, 如果k-a[i] 是存在的, 那么就可以选上这个值就行一个组合, 否则不能选...原创 2018-04-22 21:36:32 · 607 阅读 · 0 评论 -
HDU 6415 Rikka with Nash Equilibrium 【dp + 思维】 多校
传送门题意: 在一个矩阵中,如果某一个数字是该行该列的最大值,则这个数满足纳什均衡。 要求构造一个n*m的矩阵,里面填的数字各不相同且范围是【1,n*m】,并且这个矩阵只能有一个纳什均衡, 问有多少种构造方案思路: 因为这个和最大值有关, 所以我们考虑从大到小放. 从大到小一个个放数字进去,每放进去一个数字,它的这一行这一列就被占领(这一行这一列就可以放数字了). 可以发现每放进去一个数...原创 2018-08-21 15:41:40 · 206 阅读 · 0 评论 -
经典的三色小球相邻小球颜色不同,摆成一排的方案数【】
题目描述: 有三种颜色的球, 每种球的数量分别是a, b, c, 问把这三种小球摆成一排, 相邻小球颜色不同的方案数是多少?思路: dp, dp[i][j][k][l] 表示剩ijk个 最后一个是l颜色, 那么讨论一下最后的颜色的种类就直接转移就行了.AC Codetypedef long long ll;ll dp[22][22][22][4];void solve() { i...原创 2018-09-20 21:11:45 · 5246 阅读 · 3 评论 -
CF 460 div2 D 题 Substring 【拓扑序 + dp】
传送门 // 给定一幅有向图, 每个点上有一个字母, 定义一条路径的长度为该路径上的点的字母出现次数最多的那个字母次数, 现在问你最长的路径长度是多少.// 思路: 很明显的拓扑序, 有一个问题就是到了一个点后我们要求出到该点的所有路径中26个字母中出现的最大次数并保存下来, 也就是我们设dp[i][j] 代表到i这个点时j字母出现的次数最大是多少. 每次到一个点后就维护下这些信息. 每次推原创 2018-02-01 00:12:41 · 323 阅读 · 0 评论 -
HDU 2833 WuKong 【floyd最短路 + dp】
传送门 // 题意: 给定一幅无向图(n, m), 给定两对起点和终点, 问这两对起终点的最短路上最多可以重合多少个点. (也就是最多可以经过多少个相同的点), // 很明显的经过的相同点必是连续的, 我们设dp[i][j] 表示 i 到 j的最短路径上的点数, 然后我们怎么更新这个值了, 那就是我们在做floyd的时候, 当一条边可以被松弛的时候, dp[i][j] = dp[i][k] +原创 2018-01-31 17:13:37 · 330 阅读 · 0 评论 -
HDU --- 5965 扫雷 【dp + 思维】
传送门 //题意 : 自己看吧, 中文不难. //思路 : 比赛的时候想多了. QAQ难受. 用dp[i]表示当前列放的地雷数, num[i]是题目中给出的数量. 并且可以知道只要第一列的地雷数确定了, 那么后面的方案数也就一定确定了. 所以我们就枚举第一列可能放的方案数, 最多三种情况0,1,2. 然后根据dp[i]的性质我们也可以推出, dp[i] = num[i-1] - dp[i-1原创 2017-08-22 19:35:40 · 385 阅读 · 0 评论 -
CF -- 835C Star sky 【dp + 预处理】
传送门 //题意就是在一个n*n的矩阵中算出给定范围内在t时刻是所有星星亮度的总和. //因为给的范围是一个矩形, 所以我们用dp预处理出在一定范围内的亮度为0-c的每一个数量, 再去算出每一个亮度在对应的时刻的亮度, 最后累加即可. (dp 处理的时候就是用的容斥原理. 很简单的) AC Codeint dp[105][105][15]; //dp[i][j][k] 代表总左下角(1,原创 2017-08-01 10:41:31 · 545 阅读 · 0 评论 -
CodeChef - AMJMP Jump on Buildings 【dp + 思维】
传送门 //有一排n个高度的房子, 每次从第i个房子开始跳, 开始可以向左或者向右, 并且只能跳到比当前房子低的房子上, 并且每一次跳跃方向要和上一次相反(除了第一次). 问每个位置i可以最多跳几次. //我们通过观察得到对于当前位置我们可以向左枚举, 然后再向右枚举, 并且记录当前这个位置到其他位置可以眺到的最远距离, dp[i][j]表示从位置i跳到位置j的最大跳跃次数是多少. 并且我们要处原创 2017-10-22 00:08:03 · 351 阅读 · 0 评论 -
最大01矩阵相关题目 【经典的悬线法】 bzoj1057
好的博客首先01相间矩阵是全1或全0 的一种特殊求解方式,所以只要掌握到了全1(全0)最大矩阵的求解方式,那么这个相间矩阵也就求出来了。其实这也是白书上的一道经典的例题,就叫做悬线法。下面的是白书的解法(求解的是全1矩阵)。我们把每个点向上延伸的连续的1看成一条悬线,并且用up(i,j),left(i,j), right(i,j) 表示格子(i,j) 的悬线长度以及该悬线向左、向右运动的“运动极限”原创 2017-11-26 01:16:14 · 817 阅读 · 0 评论 -
ZOJ 3956 Course Selection System 【 思维 + 01背包 】
传送门 //题意:就是选择很多对然后左边的相加是H(x), 右边相加是C(x), 最后要使得题目中给出的那个公式算出来的答案要最大. //思路: 我们观察可以发现C的值比较小, 只有100, n又只有500, 所以(求和)C最大只有5e4, 所以我们可以找出对于每一个容量(1-5e4的每一个数看作是一个容量), 它对应的最大值是多少, 也就是类似于01背包了, 所以做一次01背包算出对应的最大原创 2017-11-21 21:29:12 · 275 阅读 · 0 评论 -
HDU 5074 Hatsune Miku 【dp思维】
传送门 //题意: 给一个m*m的矩阵, 有n个数a[i]. 然后定义score(i,j)是矩阵第i行第j列的值, i, j分别是a[i]和a[i+1]. 现在给出了n个数a[i], 如果a[i]是-1, 那么就可以把a[i]变成1~n里面的任意一个数。现在问能得到的最大分数是多少.//思路: 简单的dp. 设dp[i][j]代表前i个数最后一个为j时的最大分数 所以只需要分两种情况讨论下就可以原创 2017-11-22 01:00:37 · 334 阅读 · 0 评论 -
HDU 1087 Super Jumping! Jumping! Jumping! 【简单dp思维题】
传送门 //题意: 求一个上升子序列并使他们的和最大!!! //思路: 设dp[i] 为从1 到 i 中是上子序列可以得到的最优值, 那么对于每一个当前数我们遍历其前面比它小的然后你更新当前dp值就行了. 注意一点就是它最少会选一个, 即初值应该设置原序列的一个值. 而不是0.AC Codeconst int maxn = 1e3+5;int cas=1;int dp[maxn],a[max原创 2017-11-22 19:52:50 · 277 阅读 · 0 评论 -
LA -- 3029 City Game 【思维 + dp】
传送门 //题意: 给出一个只有F,R组成的矩阵, 找出一个最大全由F组成的矩阵, 并将它的面积乘3输出. //思路: 还是类似于扫描法, 维护几个值, up[i][j]代表格子i,j 往上最大能走的空格数. left[i][j]代表格子i,j 往左最大能走的空格数. right[i][j]代表格子i,j 往右最大能走的空格数. 那么怎么计算了. 如果第i行第j列不是空格, 那么三个数组的值都原创 2017-08-23 19:05:14 · 304 阅读 · 0 评论 -
HDU 4571 Travel in time 【最短路 + dfs记忆化||dp】好题!!!
传送门 // 题意: 给定一幅无向图(n, m), 每个点有个时间花和价值, 任意点之间也有路径花费, 你经过的每一个点你可以选择访问它, 消耗该点的时间花费, 然后得到它的价值. 给定起点和终点(必须经过但是可以不访问), 问可以得到的最大的价值是多少.// 思路: 很明显的每一个点我们可以选择访问或者不访问, 那么就是01背包问题, 也就是dp, 我用的dfs来实现的该dp过程. 但是一定要记原创 2018-01-30 23:10:03 · 320 阅读 · 0 评论 -
牛客练习赛 41 B 题 【简单的dp计数】
传送门题意: 就n个数,开始分数为0, 第i次操作可以有两种选择1: 给分数加上a[i]2: 给分数乘-1问n次过后分数为-666并且任意一次操作后分数不能是666的方案数是多少? (%1e8+7)思路: 很明显的dp计数, dp[i][j] 表示 i 次操作后分数为 j 的方案数, 那么转移方程是dp[i][j] = dp[i-1][j-a[i]] + dp[i-1][-j];去掉...原创 2019-03-02 15:27:47 · 239 阅读 · 0 评论