【dp】租用游艇问题

来源:互联网 发布:舞台设计软件 编辑:程序博客网 时间:2024/05/16 01:23

问题描述:

 长江游艇俱乐部在长江上设置了n 个游艇出租站1,2,…,n。游客可在这些游艇出租站租  用游艇, 并在下游的任何一个游艇出租站归还游艇。游艇出租站i 到游艇出租站j 之间的租  金为 r(i,j),1£i<j£n。试设计一个算法,计算出从游艇出租站 1 到游艇出租站 n 所需的最少租  金。

编程任务:

 对于给定的游艇出租站 i 到游艇出租站 j 之间的租金为 r(i,j),1£i<j£n,编程计算从游艇出租站  1到游艇出租站 n所需的最少租金。

数据输入:

 由文件 input.txt 提供输入数据。文件的第 1 行中有 1 个正整数 n(n<=200) ,表示有 n个  游艇出租站。接下来的n-1行是r(i,j),1£i<j£n。

结果输出:

 程序运行结束时, 将计算出的从游艇出租站1 到游艇出租站 n所需的最少租金输出到文件  output.txt中。

样例:

 3

 5 15

 7

12

核心思想:

 类似floyd,f[i,j]=min{f[i,k]+f[k,j],f[i,j](i<k<j)} i到j的最短费用是之际到达或者经由k而产生的

var a,f:array[0..210,0..210]of longint; n,i,j,k:longint;function min(a,b:longint):longint;begin ifa>b then exit(b); exit(a);end;begin assign(input,'p38.in');reset(input); assign(output,'p38.out');rewrite(output); readln(n); fori:=1 to n-1 do begin  for j:=i+1 to n do   read(f[i,j]);  readln; end; fori:=1 to n-1 do  forj:=i+1 to n do  for k:=i+1 to j-1 do   f[i,j]:=min(f[i,k]+f[k,j],f[i,j]); writeln(f[1,n]); close(input);close(output);end.
题目来源:《算法设计与分析》第三章动态规划

原创粉丝点击