游艇租用问题(动态规划)
2013-04-21 15:12
477 查看
一、问题描述:
长江游艇俱乐部在长江上设置了n个游艇出租站1,2,3…,n。有课可以在这些游艇出租站用游艇,并在下游的任何一个游艇出租站归还游艇。游艇出租站i到游艇出租站j之间的租金为r(i,j),1<=i<j=n。试设计一个算法,计算从游艇出租站1到出租站n所需的最少租金。
二、实现代码:
欢迎转载,转载请注明出处:/article/7758898.html
长江游艇俱乐部在长江上设置了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