Acwing 1089. 烽火传递
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. 烽火传递相关推荐
- AcWing 1089 烽火传递 题解(动态规划—DP—单调队列优化DP)
AcWing 1089 烽火传递 单调队列优化DP,思路比较简单,维护一个保持元素单调递增的单调队列,队首就是第i座烽火台能接收到的,代价最小的方案,加上第i座烽火台的代价就是这座烽火台的最小值 #i ...
- 1089 烽火传递(单调队列优化)
1. 问题描述: 烽火台是重要的军事防御设施,一般建在交通要道或险要处.一旦有军情发生,则白天用浓烟,晚上有火光传递军情.在某两个城市之间有 n 座烽火台,每个烽火台发出信号都有一定的代价.为了使情报 ...
- 烽火传递(dp+单调队列)
烽火台又称烽燧,是重要的军事防御设施,一般建在险要或交通要道上.一旦有敌情发生,白天燃烧柴草,通过浓烟表达信息:夜晚燃烧干柴,以火光传递军情,在某两座城市之间有 n 个烽火台,每个烽火台发出信号都有一 ...
- AcWing 122. 糖果传递【贪心】【《算法竞赛进阶指南》,微软面试题 , HAOI2008】
AcWing 122. 糖果传递 一.题目链接 二.题目分析 (一)算法标签 (二)解题思路 三.AC代码 四.其它题解 一.题目链接 AcWing 122. 糖果传递 进阶题目 AcWing 105 ...
- 一本通1602烽火传递
1602:烽火传递 时间限制: 1000 ms 内存限制: 524288 KB [题目描述] 原题来自:NOIP 2010 提高组初赛 · 完善程序 烽火台是重要的军事防御设施,一般建 ...
- [NOIP2010初赛]烽火传递--单调队列优化
问题描述: 烽火台又称烽燧,是重要的军事防御设施,一般建在险要或交通要道上.一旦有敌情发生,白天燃烧柴草,通过浓烟表达信息:夜晚燃烧干柴,以火光传递军情,在某两座城市之间有n个烽火台,每个烽火台发出信 ...
- 刷题总结——烽火传递(单调队列+dp)
题目: 题目描述 烽火台又称烽燧,是重要的防御设施,一般建在险要处或交通要道上.一旦有敌情发生,白天燃烧柴草,通过浓烟表达信息:夜晚燃烧干柴,以火光传递军情.在某两座城市之间有 n 个烽火台,每个烽火 ...
- AcWing1089.烽火传递(单调队列DP)
题目传送门 烽火台是重要的军事防御设施,一般建在交通要道或险要处. 一旦有军情发生,则白天用浓烟,晚上有火光传递军情. 在某两个城市之间有 n 座烽火台,每个烽火台发出信号都有一定的代价. 为了使情报 ...
- SSLOJ 2883 烽火传递
题目 Description 烽火台又称烽燧,是重要的军事防御设施,一般建在险要或交通要道上.一旦有敌情发生,白天燃烧柴草,通过浓烟表达信息:夜晚燃烧干柴,以火光传递军情,在 某两座城市之间有 n ...
最新文章
- 机器学习:计算学习理论
- oracle if函数变量,Oracle数据库——PL/SQL编程
- 关于ListView顶部和底部滚(拖)动出现阴影解决方案
- java如何实现redis分片存储_面试官:你说一下Redis吧,怎么实现高可用,还有持久化怎么做的?...
- ASP.NET Core2基于RabbitMQ对Web前端实现推送功能
- 文献学习(part7)--A strategy to incorporate prior knowledge into correlation network cutoff selection
- 牛客练习赛46 A	华华教奕奕写几何 (简单数学)
- 微软企业库4.1学习笔记(十)企业库的设计
- [ActiveRecord] 之ActiveRecordMediator
- 1.1.29 加入项目符号后换行文字未对齐
- C++内存日志系统(一)
- VirtualBox安装MAC虚拟机,屏幕分辨率小,扩大的办法
- 基于粒子群优化算法的函数寻优算法
- DSP2812开发板学习
- 机器学习必学十大算法
- 基于遗传算法的神经网络,遗传算法训练神经网络
- php+ul+前缀点怎么加,子网前缀长度怎么填
- finalshell连接超时怎么办
- 基于BP神经网络算法的实现静态图片和视频人脸识别、性别识别
- 抖音什么题材最吸粉 抖音发什么内容容易火
热门文章
- 如何让你的碎片化时间更有价值?
- 这才是真正的蛙泳,还挺能蹦跶......
- 竞赛奇葩队名,学编程的人都是隐藏的段子手 | 今日最佳
- 银联再发道歉声明;印度发布吃鸡禁令;甘肃全省校园禁售辣条;波音面临50亿罚款;女子撕扯民警头发罚两百;这就是今天的大新闻。...
- 16个让你烧脑让你晕的悖论
- 北斗三号b1c频点带宽_【导航论坛】北斗三号卫星导航信号及接收策略
- 电影特效用到什么计算机知识,后期影视特效处理知识普及
- linux 装nano命令,linux下安装 nano 如果没有这个命令的话~~可以看下
- java mongodb 批量删除_MONGODB删除/新增/更改大量记录的方法
- 常用计算机二级函数,计算机二级MS office常用函数