种花 (贪心+(堆 or 线段树))

种花
【问题描述】
经过三十多个小时的长途跋涉, 小 Z 和小 D 终于到了 NOI 现场——南山南
中学。 一进校园, 小 D 就被花所吸引了( 不要问我为什么) , 遍和一旁的种花
园丁交( J) 流( L) 了起来。
他发现花的摆放竟有如此奥秘: 圆形广场共有 N 个种花的位置, 顺时针编
号 1 到 N。 并且每个位置都有一个美观度 ai, 如果在这里种花就可以得到这 ai的
美观度。 但由于地处南山土壤肥力欠佳, 两株花不能种在相邻的位置( 1 号和 N
号也算相邻位置) 。 校方一共给了 M 株花, 经过园丁的精妙摆放, 才能如此吸
引小 D。 所以现在小 D 也想知道应该如何摆这 N 株花。
【输入格式】
从文件 flower.in 中读入数据。
输入第一行包含两个整数 N,M 。
接下来一行包含 N 个正整数, 依次描述美观度 a1,a2 ,…, aN 。
【输出格式】
输出到文件 flower.out 中。
输出一个整数, 表示最佳植树方案可以得到的美观度。 如果无解输出
“Error!” , 不包含引号。
【样例输入】
7 3
1 2 3 4 5 6 7
【样例输出】
15
【数据规模与约定】
对于 50%的数据满足 N <= 3000 。
对于 100%的数据满足 M <=N <= 200000 , 1000 <=ai <= 1000。


50分代码(可采用dp寻找前i-2个的最大值)
代码如下:


if n<=3000 then
begin
fillchar(f,sizeof(f),$9f);
fillchar(g,sizeof(g),$9f);
for i:=1 to n do
begin
f[i,0]:=0;
g[i,0]:=0;
end;
f[1,1]:=a[1];
for i:=2 to n-1 do
for j:=1 to min((i div 2+i 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值