租用游艇问题
2017-10-28 10:32
435 查看
租用游艇问题
Description长江游乐俱乐部在长江上设置了n个游艇出租站,游客可以在这些游艇出租站用游艇,并在下游任何一个游艇出租站归还游艇,游艇出租站i到j之间的租金是rent(i,j),其中1<=i
Input
对于每一个测试案例, 通过键盘逐行输入,第1行是输入整数n(如果该整数是0,就表示结束,不需要再处理),表示有n个出租站,接下来是n-1行,第一行表示从 站点1 到 站点2,站点1 到 站点3 所需费用,以此类推
Output
输出最大值
Example Input
3
5 15
7
Example Output
12
思路分析
填表法,从下往上,从左往右,用数组 c[MAX][MAX] 来储存刷新后的从站点 i 到 站点 j 的最小花费
代码块
#include<iostream> #define MAX 1000 using namespace std; int c[MAX][MAX]; //核心算法 int dp(int n) { for(int i=n; i>=1; i--) for(int j=i; j<=n; j++) if(i == j) c[i][j] = 0; else { for(int k=i+1; k<j; k++) { int temp = c[i][k] + c[k][j]; if(temp < c[i][j]) c[i][j] = temp; } } return c[1] ; } int main() { int n; cin >> n; for(int i=1; i<n; i++) for(int j=i+1; j<=n; j++) cin >> c[i][j]; cout << dp(n); return 0; }