![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
单调队列+斜率优化DP
team79
我在努力。
展开
-
hdu 3401 单调队列优化DP
dp【i】【j】表示第i天之后拥有j个股票的最大利润 那么dp【i】【j】 = max{ dp【i-1】【j】, dp【i-W-1】【k】 - ( j - k ) * ap【i】, dp【i-W-1】【k】 - ( k - j ) * bp【i】 } 这里直接从i-w-1转化而来,并没有考虑之前的,原因是之前的会先转换到i-w-1 然后这里可以用单调队列来优化 k 的选取,本来k的选取的复杂原创 2014-03-29 21:31:19 · 606 阅读 · 0 评论 -
uvaLA 3695
首先枚举矩形的上下两边的坐标,然后原创 2014-05-29 14:15:34 · 720 阅读 · 0 评论 -
uvaLA 2678 单调队列
其实可以转化成求一对 i,j原创 2014-05-28 13:47:06 · 621 阅读 · 0 评论 -
hdu 2829 斜率优化DP
AC代码如下: #include #include #include #include using namespace std; int num[1100], N, M; long long sum[1100], mul[1100]; int pos[1100], s, e; long long dp[1100][1100]; long long calc( int i, int k原创 2014-05-10 22:38:50 · 484 阅读 · 0 评论 -
poj 1180 斜率优化DP
AC代码如下: #include #include #include #include using namespace std; int dp[11000]; int sumt[11000], sumf[11000]; int S, N; int q[11000], head, last; int main(){ while( scanf( "%d", &N ) != EOF ){原创 2014-03-22 20:40:33 · 740 阅读 · 0 评论 -
hdu 2993 斜率优化DP
直接看论文即可做 [题意简述] 读入一列正数,a1, a2, …, aN,以及一个数F。定义,i≤j。 求Max{ave(a, b), 1≤a, b≤N,且a≤b-F+1},即求一段长度大于等于F且平均值最大的子串。 范围:F≤N≤105。 [分析] 简单的枚举算法可以这样描述:每次枚举一对满足条件的(a, b),即a≤b-F+1,检查ave(a, b),并更新当前最大值。原创 2014-05-06 10:47:55 · 488 阅读 · 0 评论 -
poj 3017 单调队列优化DP
这是看了论文之后来做的。。。。 但是论文上有个地方没原创 2014-05-03 19:17:16 · 569 阅读 · 0 评论 -
【noi2005试题】瑰丽华尔兹 单调队列优化DP
1A。。。。。。 dp【k】【i】【j】 表示第k段的倾斜之后到达(i,j)处时已经滑动的最长距离 根据倾斜的方向,来进行递推 比如 当向下倾斜时 dp【k】【i】【j】 = max( dp【k-1】【i-k】【j】 +k ) k 这里如果不优化的时间复杂度就变成了 knmn 所以要用单调队列来优化这个决策的时间,优化前为o(n),优化后为o(1) AC代码如下: #inclu原创 2014-03-31 22:03:35 · 672 阅读 · 0 评论 -
hdu 3530 单调队列优化DP
AC代码如下: #include #include #include #include using namespace std; int q1[211000], pos1[211000], head1, tail1; int q2[211000], pos2[211000], head2, tail2; int ans, now; int N, M, K; int num[211000原创 2014-03-30 21:45:06 · 735 阅读 · 0 评论 -
poj 1894 单调队列优化DP
裸的单调队列优化DP AC代码如下: #include #include #include #include #include using namespace std; int q[1100000], pos[1100000], head, tail; int nownum, leavenow; int main(){ int T; char s[10];原创 2014-03-29 15:21:03 · 682 阅读 · 0 评论 -
hdu 3413 单调队列优化DP
可以看下这个数据 2 8 8 0 1 2 2 1 0 0 0 依题意可知,实际上是求 max(sum【j】-sum【i】)j-i 然后我们可以这样想,每次求以j结尾的最大值,那么就是sum【j】固定,求最小的sum【i】,于是直接的单调队列优化DP 开始的时候总是考虑最后的结果要是 start最小,长度最短,搞了半天没搞出来,最后看了下,直接从1开始求的就是符合要求的原创 2014-03-29 18:38:51 · 585 阅读 · 0 评论 -
poj 2823 单调队列优化DP
注意初始化,最开始的时候队列里应该放num【1】,如果不放的话,会与队列里的第一个比较,这样就不对了 AC代码如下: #include #include #include #include using namespace std; int num[1110000]; int q[1110000], pos[1110000], head, tail; int N, K; void g原创 2014-03-29 14:53:33 · 618 阅读 · 0 评论 -
hdu 3507 斜率优化DP
AC代码如下: #include #include #include #include using namespace std; int N, M; long long sum[550000]; long long dp[550000]; int pos[550000], s, e; double calc( int j, int i ){ return dp[j] + su原创 2014-05-10 20:45:32 · 538 阅读 · 0 评论