![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
dp
weixin_43916947
这个作者很懒,什么都没留下…
展开
-
【hdu2955 01背包变形+洛谷1064 有依赖的背包】
开始以为是水题目,采用将浮点数乘以100这种昏方法,还是看题解才会写。 这题,首先是对小数背包的处理,显然不能把小数当做容量,那么只能当价值,求出对不同的money,最大的小数是多少, 这样通过边界判断money是否合法,输出合法的最大的money就是背包最终求的价值。 本题一个重点在于状态转移方程。 概率题,显然不同事件是分步的,应该相乘,然后呢,显然一旦被抓,后面就没了,不被抓的概率应...原创 2019-03-09 16:12:21 · 168 阅读 · 0 评论 -
codeforce 812B dfs or dp
作比赛的时候想到了dp,dp大致思路是对的,但是没有考虑到特殊情况,而且代码一堆bug,因此wa; 最开始想用dfs,但用pow算次方算错了就没用,注意pow是浮点数类型,用其他变量表示可能会错; dfs写法: #include <cstdio> #include <cstring> #include <cmath> #include <algorit...原创 2019-03-04 21:28:01 · 258 阅读 · 0 评论 -
poj 1887 典型的最长上升子序列问题(妙用二分,贪心)
题意:求最长下降子序列 1e5,o(n^2)肯定会爆 不过还是先上o(n^2)做法 这个做法就是用到了dp. 状态:d[i]:以a[i]为最末尾一位的的最长上升子序列的长度 状态转移方程:对a[i]遍历0~i-1,如果可以转移更新(a[j]<a[i])则有状态转移方程dp[i]=max(dp[i],dp[j]+1) 最优解:遍历dp数组,找最大值 整个动态规划的思路还是很清晰的...原创 2019-05-01 21:47:40 · 382 阅读 · 0 评论 -
hdu1003 max sum 典型线性dp
题意:给一段数组,求一段区间和,使得区间和最大。 询问t=20,n=1e5 显然用前缀和暴力求解会tle,因为在基础dp的专题里面看到的,显然是用dp做。 第一反应是套用二维数组,dp[i][j]表示i~j之间最大区间和 但是这样就无法实现状态转移了. 比如某段区间,左侧的a[i]=-1,如果加入这个这个,短期看肯定是坏事,但可能-1的左侧就是100,那么又是最优的了,显然这样就不好从 ...原创 2019-05-02 17:41:51 · 100 阅读 · 0 评论 -
NYOJ10 dp+dfs(记忆化搜索)
题意:给一个n*m的矩阵,求一段连续的路径 ,路径上的数严格递增,求路径最长为多少 从dp的角度,容易想到定义状态:dp[i][j] : 以a[i][j]为最后一位的最长路径 那么怎么更新?LIS问题中,数组是自左向右的,可以直接由之前的已经确定的最优子结构得到dp, 但是这种二维的并不是,因为 例如: 16 17 18 19 6 15 24 25 20 7 14 23 22 21 ...原创 2019-05-04 14:29:53 · 159 阅读 · 0 评论 -
poj2479 Maximum sum 线性dp+最大子段和改版
题意:对数组a,要求找到两段不重合的子段,使得两子段和最大 / /每个子段至少有一个元素. T=30,n=5e4 一般的,联想到两种思路: 1.根据已知的o(n)求最大子段和的方式(hdu1003),推出此题的解法 2.定义一个新状态,用dp求解 因为是两段子段和,因此不好定义新的状态dp求解,故用第一种思路. 在hdu1003中,状态dp[i]是以a[i]为...原创 2019-05-04 15:44:00 · 163 阅读 · 0 评论