码迷,mamicode.com
首页 > 其他好文 > 详细

烽火传递(单调队列优化DP)

时间:2021-01-21 10:59:48      阅读:0      评论:0      收藏:0      [点我收藏+]

标签:style   for   spl   表示   tar   none   sed   while   wing   

原题链接

dp[i]表示信息传递到第i个烽火台时花费的最少代价

dp[i]=min(dp[j])+a[i];i-m<=j<=i-1

单调队列优化

 

技术图片
const int maxn=1e6+7;
int a[maxn],n,m;
int dp[maxn],q[maxn];
int main(){
    n=read();m=read();
    for(int i=1;i<=n;i++) a[i]=read();
   
    int hh=0,tt=0;
    for(int i=1;i<=n;i++){
        if(q[hh]<i-m) hh++;
        dp[i]=dp[q[hh]]+a[i];
        while(hh<=tt&&dp[q[tt]]>=dp[i]) tt--;
        q[++tt]=i;
    }
    int res=0x3f3f3f3f;
    for(int i=n-m+1;i<=n;i++) res=min(res,dp[i]);
    cout<<res;
    return 0;
}
View Code

 

烽火传递(单调队列优化DP)

标签:style   for   spl   表示   tar   none   sed   while   wing   

原文地址:https://www.cnblogs.com/Cutele/p/14306213.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有
迷上了代码!