2012年8月27日
摘要: 单调队列DP,开始想错了,WA了好多次。后来才发现错在哪了。。我们先枚举子串的结尾,并维护2个队列(单增,单减)。如果2个队列的队头的差别大于k,则较小的队头值的位置肯定不满足要求。那么就通过减小大的,增大小的来是dif更小。直到找到一个合法位置now,那么对于i-1这个子串的结尾,now到i-1这个区间肯定满足要求。所以有ans = max(ans,i-1-now+1)。now初始值为-1,因为有可能最大长度为n。View Code 1 #include<iostream> 2 #include<cstdio> 3 #include<cmath> 4 #d 阅读全文
posted @ 2012-08-27 22:13 Dev-T 阅读(639) 评论(0) 推荐(0) 编辑
摘要: 最近遇到不少DP优化的题,感觉这方面还有些欠缺,现在就多做点这方面的题,练练手。这题是道较为经典的单调队列优化的题,总共有三种状态,买,卖及其他。对于买:dp[i][j] = max(dp[i][j],dp[x][y] - (j-y)*sell) (y<=j && y+买的限制>=j && 0 <= x <= i-w-1)对于卖:dp[i][j] = max(dp[i][j],dp[x][y] + (y-j)*buy) (y >= j && j + 卖的限制 >= y && 0 <= x 阅读全文
posted @ 2012-08-27 16:35 Dev-T 阅读(391) 评论(0) 推荐(0) 编辑