线段覆盖 求解!急急急
pascal吧
全部回复
仅看楼主
level 1
DWT20011130 楼主
线段覆盖
cover.pas
问题描述:
如果一个点在一条线段上(包括这个点是线段端点的情况),我们说“这条线段覆盖了这个点”。
现有 n个在一条水平直线上排列的点,请你编写程序计算一下:如果用3条线段覆盖所有的点,这3条线段的长度之和最小是多少?
注意:既然说是3条,当然就不允许某两条是首尾相接的,否则就是2条了,而且,任何线段的长度都要大于0。
输入文件:
输入文件cover.in,第一行为整数 n( 6<=n<=100),表示点的数量。第二行有n-1个整数,表示其它各点到最左端的点的距离,单位是厘米。已知这些整数都不会超过40000。
输出文件:
输出文件cover.out,文件中只有一个整数,表示用3条线段覆盖所有点时,它们长度之和的最小值,单位是厘米。
输入输出样列
输入:
6
1 4 10 15 17
输出:
9
2013年04月01日 11点04分 1
level 11
为什么这段时间那么多小学生难理解的题目?
2013年04月01日 11点04分 2
level 7
穷举过30%
2013年04月01日 12点04分 3
至少。。。
2013年04月01日 13点04分
level 8
枚举空隙部分
2013年04月01日 13点04分 4
level 1
啦啦啦
2015年08月18日 12点08分 5
level 1
给个核心部分:这题要用冒泡排序加上这个核心if (a[i+1]-a[i])+(a[j+1]-a[j])>max then max:=(a[i+1]-a[i])+(a[j+1]-a[j]);
2015年08月18日 12点08分 6
源程序
2018年03月12日 11点03分
level 2
var
n,i,j,k,max:longint;
a:array[1..100]of longint;
begin
assign(input, 'cover.in');
assign(output, 'cover.out');
reset(input);
rewrite(output);
read(n);
for i:=1 to n-1 do read(a[i]);
for i:=1 to n-1 do
for j:=1 to i-1 do
if a[j]<a[j+1] then begin k:=a[j];a[j]:=a[j+1];a[j+1]:=k;end;
for i:=1 to n-1 do
for j:=1 to n-1 do
if (a[i+1]-a[i])+(a[j+1]-a[j])>max then max:=(a[i+1]-a[i])+(a[j+1]-a[j]);
write(max);
close(input);
close(output);
end.
不对
2018年03月12日 11点03分 7
1