您的位置:首页 > 其它

游艇租用问题(动态规划)

2013-04-21 15:12 477 查看
一、问题描述:

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

二、实现代码:

#include <iostream>
#include <vector>
using namespace std;
int main()
{
int num,i,j,k,tmp;
cin>>num;
vector< vector<int> >list;
vector<int>line;
for(i=0;i<num-1;i++)
{
list.push_back(line);
for(j=0;j<=i;j++)         //在容器前面添加些0,从而使list[i][j]表示从第i个出租站到第j个出租站所需的金额
{                         //同时也去除无效的表示,比如list[0][0]直接赋值为0,从而使后面的计算更方便
list[i].push_back(0);
}
for(j=i+1;j<num;j++)
{
cin>>tmp;
list[i].push_back(tmp);    //从i+1个出租站到第j+1个出租站所需金额
}
}
for(k=2;k<num;k++)    //从两个出租站开始,逐步计算每几个出租站之间的最优解,最终计算num-1个出租站合并的最优解
{
for(i=0;i<num-k;i++)
{
int mark=i+k;
for(j=i+1;j<mark;j++)
{
if(list[i][j]+list[j][mark]<list[i][mark])    //例如list[0][1]+list[1][2]<list[0][2],则改变list[0][2]的值
{
list[i][mark]=list[i][j]+list[j][mark];
}
}
}
}
cout<<list[0][num-1];
return 0;
}


欢迎转载,转载请注明出处:/article/7758898.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: