tyvjP1313 烽火传递

题目描述

烽火台又称烽燧,是重要的防御设施,一般建在险要处或交通要道上。一旦有敌情发生,白天燃烧柴草,通过浓烟表达信息:夜晚燃烧干柴,以火光传递军情。在某两座城市之间有N个烽火台,每个烽火台发出信号都有一定的代价。为了使情报准确的传递,在M个烽火台中至少要有一个发出信号。现输入N、M和每个烽火台发出的信号的代价,请计算总共最少需要花费多少代价,才能使敌军来袭之时,情报能在这两座城市之间准确的传递。

输入格式

第一行有两个数N,M分别表示N个烽火台,在M个烽火台中至少要有一个发出信号。
第二行为N个数,表示每一个烽火台的代价。

输出格式

一个数,即最小代价。

测试样例

输入

5 3
1 2 5 6 2

输出

4

数据规模

1<=N,M<=1,000,000

烽火传递NOIP2010
这道题刚开始看的时候,想了一段时间没有想出什么可以在数据规模下拿满分的算法,然后教练讲了一个单调队列优化,觉得很厉害的样子

其实这里大家应该已经想到了,如果只拿七十分的话,只需要很简单的dp转移就行了

这里我们把每个烽火台点燃所需的代价用Wi来表示(1<=i<=N)

dp转移方式如下

烽火传递NOIP2010

也就是用f数组来存如果点第i个烽火台(此时之前的位置已经传递了烽火信息)所需要花费的最小花费,只需要在i-M到i-1这个区间里去查找最小值就行了(因为这些数组都表示点相应的烽火台及之前的位置已经传递了烽火信息),然后再加上点该烽火台所需要的花费

这里可以直接每次都从前往后for一遍然后找出min值,但我们会发现每次的查找,其实都是之前已经查找过的,这样时间承受不起啊,我们可以这样计算时间复杂度,对于每一个i(1<=i<=N)都要往前查找M个数,可以粗略地计算为O(M*N)的复杂度

相关文章:

  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2021-08-23
  • 2021-12-21
  • 2022-12-23
  • 2022-12-23
  • 2021-08-31
猜你喜欢
  • 2022-02-05
  • 2022-12-23
  • 2022-03-01
  • 2022-12-23
  • 2021-09-24
  • 2022-12-23
相关资源
相似解决方案