bzoj2442: [Usaco2011 Open]修剪草坪(单调队列优化dp)
2015-09-30 19:06
447 查看
正常的dp公式为dp[i]=max dp[j]+sum[i]-sum[j+1],(j+1不取,j在i-k-1~i-2),为了dp[i]最大,那么使dp[j]-sum[j+1]最大,用单调队列维护。
#include<stdio.h> #include<algorithm> using namespace std; typedef long long ll; ll n,k; ll a[100500],sum[100500]; ll dp[100500]; ll que[100500]; int main() { scanf("%lld %lld",&n,&k); for(ll i=1;i<=n;i++) { scanf("%lld",&a[i]); sum[i]=sum[i-1]+a[i]; } ll f=0,t=1; que[0]=-1;//取-1的意思是从头取到i。 que[1]=0; for(ll i=1;i<=n;i++) { while(f<=t&&que[f]<i-k-1)f++; dp[i]=dp[que[f]==-1?0:que[f]]+sum[i]-sum[que[f]+1]; while(f<=t&&dp[que[t]==-1?0:que[t]]-sum[que[t]+1]<=dp[i]-sum[i+1])t--; que[++t]=i; } printf("%lld",dp ); }
相关文章推荐
- 基于Android中dp和px之间进行转换的实现代码
- Android中dip、dp、sp、pt和px的区别详解
- LFC1.0.0 版本发布
- Android px、dp、sp之间相互转换
- android中像素单位dp、px、pt、sp的比较
- Android对px和dip进行尺寸转换的方法
- Android根据分辨率进行单位转换-(dp,sp转像素px)
- android 尺寸 dp,sp,px,dip,pt详解
- DP问题各种模型的状态转移方程
- POJ-1695-Magazine Delivery-dp
- nyoj-1216-整理图书-dp
- TYVJ1193 括号序列解题报告
- 对DP的一点感想
- TYVJ上一些DP的解题报告
- soj1005. Roll Playing Games
- 01背包问题
- LeetCode之Maximum Product Subarray
- DP Flow
- zoj3605 Find the Marble(三维dp)
- Word Break I,II, Triangle,Palindrome Partitioning 动态规划 DP