Acwing 1089. 烽火传递

题意:

有n个数,要保证每m个数中必须选一个,问所选数的最小总和是多少

题解:

我一开始设的状态为:dp[i]表示前i个数选完的最小值,第i个数可以选也可以不选,但是这样一个状态,如果要这么考虑的话应该开二维数组来表示状态,且答案不好求,所以我们改变状态定义:

我们定dp[i]表示第i个必选的,且前i-1个满足条件的最小值
我们可以得到状态方程为:dp[i]=min(dp[x])+a[i],x∈[i-m,i-1]
dp[x]通过单调队列可以得到

那最终的答案是什么?想想我们的状态为dp[i],前i-1个满足条件,第i个一定选择,那么也就是如果i∈[n-m+1,n],所有的情况就都会考虑到(即任意m个数都存在一个被选),所以答案就是min(dp[n-m+1],d[n-m+2]…dp[n]),在最后m个数中选一个的最小值情况

代码:

#include<bits/stdc++.h>
#define debug(a,b) printf("%s = %d\n",a,b);
typedef long long ll;
using namespace std;inline int read(){int s=0,w=1;char ch=getchar();while(ch<'0'||ch>'9'){if(ch=='-')w=-1;ch=getchar();}while(ch>='0'&&ch<='9') s=s*10+ch-'0',ch=getchar();//s=(s<<3)+(s<<1)+(ch^48);return s*w;
}
const int maxn=2e5+9;
int a[maxn];
int q[maxn];
int dp[maxn];
int main()
{int n,m;cin>>n>>m;for(int i=1;i<=n;i++){cin>>a[i];}int hh=0,tt=0;for(int i=1;i<=n;i++){if(q[hh]+m<i)hh++;dp[i]=dp[q[hh]]+a[i];while(hh<=tt&&dp[q[tt]]>=dp[i])tt--;q[++tt]=i;} int res=1e9;for(int i=n-m+1;i<=n;i++)res=min(res,dp[i]); cout<<res;return 0;
}
/*
dp[i]选择完前i个烽火台的最低花费
第i个可以选,也可以不选
dp[i]=dp[i-1]
如果选:
选择长度为j
dp[i]=min(dp[i-j])+a[i]
j:1~m
x:i-m ~ i-1
dp[i]=min(dp[x])+a[i]
*/

Acwing 1089. 烽火传递相关推荐

  1. AcWing 1089 烽火传递 题解(动态规划—DP—单调队列优化DP)

    AcWing 1089 烽火传递 单调队列优化DP,思路比较简单,维护一个保持元素单调递增的单调队列,队首就是第i座烽火台能接收到的,代价最小的方案,加上第i座烽火台的代价就是这座烽火台的最小值 #i ...

  2. 1089 烽火传递(单调队列优化)

    1. 问题描述: 烽火台是重要的军事防御设施,一般建在交通要道或险要处.一旦有军情发生,则白天用浓烟,晚上有火光传递军情.在某两个城市之间有 n 座烽火台,每个烽火台发出信号都有一定的代价.为了使情报 ...

  3. 烽火传递(dp+单调队列)

    烽火台又称烽燧,是重要的军事防御设施,一般建在险要或交通要道上.一旦有敌情发生,白天燃烧柴草,通过浓烟表达信息:夜晚燃烧干柴,以火光传递军情,在某两座城市之间有 n 个烽火台,每个烽火台发出信号都有一 ...

  4. AcWing 122. 糖果传递【贪心】【《算法竞赛进阶指南》,微软面试题 , HAOI2008】

    AcWing 122. 糖果传递 一.题目链接 二.题目分析 (一)算法标签 (二)解题思路 三.AC代码 四.其它题解 一.题目链接 AcWing 122. 糖果传递 进阶题目 AcWing 105 ...

  5. 一本通1602烽火传递

    1602:烽火传递 时间限制: 1000 ms         内存限制: 524288 KB [题目描述] 原题来自:NOIP 2010 提高组初赛 · 完善程序 烽火台是重要的军事防御设施,一般建 ...

  6. [NOIP2010初赛]烽火传递--单调队列优化

    问题描述: 烽火台又称烽燧,是重要的军事防御设施,一般建在险要或交通要道上.一旦有敌情发生,白天燃烧柴草,通过浓烟表达信息:夜晚燃烧干柴,以火光传递军情,在某两座城市之间有n个烽火台,每个烽火台发出信 ...

  7. 刷题总结——烽火传递(单调队列+dp)

    题目: 题目描述 烽火台又称烽燧,是重要的防御设施,一般建在险要处或交通要道上.一旦有敌情发生,白天燃烧柴草,通过浓烟表达信息:夜晚燃烧干柴,以火光传递军情.在某两座城市之间有 n 个烽火台,每个烽火 ...

  8. AcWing1089.烽火传递(单调队列DP)

    题目传送门 烽火台是重要的军事防御设施,一般建在交通要道或险要处. 一旦有军情发生,则白天用浓烟,晚上有火光传递军情. 在某两个城市之间有 n 座烽火台,每个烽火台发出信号都有一定的代价. 为了使情报 ...

  9. SSLOJ 2883 烽火传递

    题目 Description 烽火台又称烽燧,是重要的军事防御设施,一般建在险要或交通要道上.一旦有敌情发生,白天燃烧柴草,通过浓烟表达信息:夜晚燃烧干柴,以火光传递军情,在  某两座城市之间有 n  ...

最新文章

  1. 机器学习:计算学习理论
  2. oracle if函数变量,Oracle数据库——PL/SQL编程
  3. 关于ListView顶部和底部滚(拖)动出现阴影解决方案
  4. java如何实现redis分片存储_面试官:你说一下Redis吧,怎么实现高可用,还有持久化怎么做的?...
  5. ASP.NET Core2基于RabbitMQ对Web前端实现推送功能
  6. 文献学习(part7)--A strategy to incorporate prior knowledge into correlation network cutoff selection
  7. 牛客练习赛46 A 华华教奕奕写几何 (简单数学)
  8. 微软企业库4.1学习笔记(十)企业库的设计
  9. [ActiveRecord] 之ActiveRecordMediator
  10. 1.1.29 加入项目符号后换行文字未对齐
  11. C++内存日志系统(一)
  12. VirtualBox安装MAC虚拟机,屏幕分辨率小,扩大的办法
  13. 基于粒子群优化算法的函数寻优算法
  14. DSP2812开发板学习
  15. 机器学习必学十大算法
  16. 基于遗传算法的神经网络,遗传算法训练神经网络
  17. php+ul+前缀点怎么加,子网前缀长度怎么填
  18. finalshell连接超时怎么办
  19. 基于BP神经网络算法的实现静态图片和视频人脸识别、性别识别
  20. 抖音什么题材最吸粉 抖音发什么内容容易火

热门文章

  1. 如何让你的碎片化时间更有价值?
  2. 这才是真正的蛙泳,还挺能蹦跶......
  3. 竞赛奇葩队名,学编程的人都是隐藏的段子手 | 今日最佳
  4. 银联再发道歉声明;印度发布吃鸡禁令;甘肃全省校园禁售辣条;波音面临50亿罚款;女子撕扯民警头发罚两百;这就是今天的大新闻。...
  5. 16个让你烧脑让你晕的悖论
  6. 北斗三号b1c频点带宽_【导航论坛】北斗三号卫星导航信号及接收策略
  7. 电影特效用到什么计算机知识,后期影视特效处理知识普及
  8. linux 装nano命令,linux下安装 nano 如果没有这个命令的话~~可以看下
  9. java mongodb 批量删除_MONGODB删除/新增/更改大量记录的方法
  10. 常用计算机二级函数,计算机二级MS office常用函数