题目描述
在跳棋游戏大获全胜后,小明就开始一个人在校园里溜达了。突然他在校园角落里发现了一面神奇的墙壁,墙壁上有一排钉子,每个钉子上都挂着一根两端系有小球的绳子,如下图所示
小明可以调整每一根绳子在钉子左右两端的长度,当来自不同绳子的相邻小球高度一样时(具体可见样例说明),便可获得积分1分。当小明的方案获得最高积分时,迷宫大门就会开启,小明就可以进去寻找宝藏啦!
输入
输入文件door.in第一行为一个正整数n,表示墙上的绳子数。
接下来n行,每行2个整数a和b,表示绳子左右两端的初始长度。
输出
输出文件door.out仅有一个正整数,表示小明可以获得的最高积分。
样例输入
3
1 1
3 2
1 4
样例输出
2
数据范围限制
提示
思路:
乍一看好像很难的样子……
于是,比赛时果断表(输出N-1,可以水十几分)……
比完后听某位大犇讲,这题其实是贪心
仔细一想,还真是这样
记录绳子能接受的最低高度和最高高度,使用贪心策略就OK啦!!
代码:
uses math;
var
n,i,j,k,x,y,z,s,ls,x1,y1:longint;
a:array[0..500001]of longint;
begin
assign(input,'door.in');
reset(input);
assign(output,'door.out');
rewrite(output);
readln(n);
for i:=1 to n do
begin
readln(x,y);
a[i]:=x+y;
end;
x:=0;
y:=a[1];
for i:=2 to n do
begin
if a[i]<x then
begin
x:=0;
y:=a[i];
end
else
begin
inc(s);
x1:=a[i]-min(a[i],y);
y1:=a[i]-x;
x:=x1;
y:=y1;
end;
end;
writeln(s);
end.