一、问题描述:
长江游艇俱乐部在长江上设置了n个游艇出租站1,2,3…,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 12
5 15
7
代码如下:
#include <iostream>
using namespace std;
#define N 210
int cost[N][N];
int m[N];
int main()
{
int n,i,j;
while(cin>>n)
{
for(i=1;i<n;i++)
for(j=i+1;j<=n;j++)
cin>>cost[i][j];
m[1]=0;
int min;
for(i=2;i<=n;i++)
{
min=cost[1][i];
for(j=1;j<=i-1;j++)
{
if(cost[j][i]!=0 && m[j]+cost[j][i]<min){
min=m[j]+cost[j][i];
}
}
m[i]=min;
}
cout<<m[n]<<endl;
}
return 0;
}
对于动态规划,现在只有向别人学习的份,或许有一天,我也能自己解决很多问题。