租用游艇问题
作者:互联网
【题目描述】:
长江游艇俱乐部在江上设置了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所需的最少租金。
【输入描述】:
第1 行中有1 个正整数n,表示有n个游艇出租站。接下来的n-1 行是r(i,j), 1<=i<j<=n。
【输出描述】:
输出计算出的从游艇出租站1 到游艇出租站n 所需的最少租金
【样例输入】:
3
5 15
7
【样例输出】:
12
【时间限制、数据范围及描述】:
时间:1s 空间:64M
n<=200
分析: 这题显然是DP呀,怎么会是最短路呢???用f[i][j]表示第i个到第j个所要的最小花费,然后转移即可。 CODE:1 #include<iostream> 2 #include<cstdio> 3 #include<algorithm> 4 #include<time.h> 5 using namespace std; 6 const int M = 200; 7 int f[200][200]; 8 int dp(int n) { 9 int i,j,k; 10 int t=n-1; 11 j=n; 12 for(i=n-2;i>=1;i--) { 13 for(k=t;k<=n-1;k++) { 14 if(f[i][j]>(f[i][k]+f[k][j])) { 15 f[i][j]=f[i][k]+f[k][j]; 16 } else { 17 f[i][j]=f[i][j]; 18 } 19 } 20 t--; 21 } 22 return f[1][n]; 23 } 24 int main(){ 25 //freopen("boat.in","r",stdin); 26 //freopen("boat.out","w",stdout); 27 int n; 28 cin>>n; 29 int j,k=2; 30 for(int i=1;i<=n-1;i++) { 31 for(j=k;j<=n;j++) { 32 cin>>f[i][j]; 33 } 34 k++; 35 } 36 cout << dp(n) << endl; 37 return 0; 38 }
标签:200,int,游艇,问题,出租,租用,include,描述 来源: https://www.cnblogs.com/kanchuang/p/11188222.html