租用游艇问题
问题:
问题分析:
采用动态规划,用c[i][j]表示从i到j的最少花费。则c[i][j]=c[i][k]+c[k][j];要求从1到n的最小花费则需求c[1][n];此时我可以一步步有子问题求解。
代码如下:
#include <iostream>
#include<fstream>
using namespace std;
int rent[99][99];
int getrent(int n)
{
int i, j, k;
int m = n - 1;
j = n;
for (i = n - 2; i >= 1; i--)
for (k = m; k <= n - 1; k++)
{
if (rent[i][j] > (rent[i][k] + rent[k][j]))
{
rent[i][j] = rent[i][k] + rent[k][j];
}
m--;
}
return rent[1][n];
}
int main()
{
ifstream in;
ofstream out;
in.open("input.txt");
out.open("output.txt");
int n;
in >> n;
int j, k = 2;
for (int i = 1; i <= n - 1; i++)
{
for (j = k; j <= n; j++)
{
in >> rent[i][j];
}
k++;
}
out << getrent(n) << endl;
return 0;
}
结果: