我非常幼稚,我认为这种策略会起作用: 1)找到点亮一切的最佳方法 2)从最佳解决方案中找到K个最昂贵的块(解决方案不做任何更改) 3)查找K个最便宜的未使用块 4)将我们的解决方案中的昂贵块改为便宜块 不幸的是,如果K大于1,这不是最佳解决方案。
什么是有效,正确的算法?
输入文件:标准输入
输出文件:标准输出
时间限制:2秒
内存限制:1024兆字节
一条名为“迷恋街”的街道被分为N个等长的街区。对于每个块i(1≤i≤N),
如果i> 1,则其左侧为块i − 1;如果i 与它的名字不同,这条街臭名昭著,是夜晚的黑暗阴森之处。为了解决这个问题,罗伯特
决定为某些街区安装路灯。为第i个街区安装路灯的成本
是Wi,总成本是每个安装成本的总和。安装后,每个块应
有一个路灯,或者在左或右街区有一个路灯。
现在,给定阵列W和最大可能的操作数K,您应该找到整条街道的最低照明成本。
输入
第一行包含两个以空格分隔的整数N,K。N是块数,K是 最大可能的操作次数。 (1≤N≤250000,0≤K≤9) 第二行包含N个以空格分隔的整数W1,W2 ... WN,其中Wi是安装a的成本 第i个街区的路灯。 (0≤Wi≤109 )
输出
打印一个整数,其中包含整条街道的最低照明费用
答案 0 :(得分:0)
我不确定这是否会超出您的内存限制,但是如何计算 W(i,k)我的房屋的照明成本最低,最多交换k次,房屋的位置存储在v(i,k)中,照明的房屋存储在位图BM(i,k)中?然后,根据先前的值继续计算W(i,k + 1)和W(i + 1,k),直到达到i = N,k = K。