租用游艇问题(pascal)

超级游艇 浏览

WI游艇租赁公司专长于带船员的豪华游艇包租服务,提供奢华大帆船、动力游艇及超级游艇的租赁,涉及全球最美丽的海域,地中海,加勒比海,印度洋,南太平洋,亚洲地区等。

地中海地区包括:

西地中海

科西嘉岛 法国 西班牙 巴塞罗那 白色海岸

意大利 热那亚 里古利亚 那不勒斯 萨勒诺 罗马 撒丁岛 西西里 托斯卡尼 威尼斯

东地中海

克罗地亚 达尔马提亚 史普里特 杜布罗夫尼克 北克罗地亚

希腊 雅典 基克拉底 多得卡尼斯 爱奥尼亚海

土耳其

加勒比海地区: 美国,巴西,巴拿马,巴哈马群岛,委内瑞拉

印度洋地区:塞舌尔,马尔代夫,马达加斯加

亚洲地区: 泰国,马来西亚,印度尼西亚,巴厘岛,缅甸,新加坡,香港

太平洋地区:波利尼西亚,澳大利亚,新西兰,斐济,汤加

简单动规

可以说是佛洛依德算法的简化,应该是用f[i]表示从1到i用的最少费用,一定是从1到某个点j的最少费用加上j到i的费用

f[i]=f[j]+a[j,i]

如果怕有个点k使a[j,k]+a[k,i]<a[j,i]那么就一定有f[k]+a[k,i]是更优解,而k也在1到i范围内,所以不必担心,求到得一定是最优解

到了程序中直接用

a[1,i]=a[1,j]+a[j,i]

边界条件a[i,i]=0

程序为

var n,i,j:longint;a:array[1..200,1..200]of longint;

begin

readln(n);

for i:=1 to n-1 do

begin for j:=i+1 to n do read(a[i,j]);readln;end;

for i:=2 to n do

for j:=1 to i-1 do

if a[1,j]+a[j,i]<a[1,i] then a[1,i]:=a[1,j]+a[j,i];

writeln(a[1,n]);

end.

转载请注明:游艇网 » 租用游艇问题(pascal)