题目描述
桂林市在阳朔边开辟了若干个旅游景点。一个游船俱乐部在这些景点都设置了游船出租站,游客可在这些游船出租站租用游船,并在下游的任何一个游船出租站归还游船,从一个游船出租站到下游的游船出租站间的租金明码标价。你的任务是为游客计算从起点到终点间的最少租船费用。
解答要求时间限制:1000ms, 内存限制:64MB
输入
输入的第一行上有一个整数n(1<=n<=100),表示上游的起点站(标记为0)到下游有n个游船出租站(标记为1,2,…,n)。接下来有n行,这n行中的第1行有n个整数,分别表示从第0站到第1,2,3,…,n站间的游船租金;第2行有n-1个整数,分别表示从第1站到第2,3,4,…,n站间的游船租金;……,第n-1行有2个整数,分别表示从第n-2站到第n-1,n站间的游船租金;第n行有1个整数,表示从第n-1站到第n站间的游船租金
输出
输出游客从起点站到终点站的最少租船费用。
样例
输入样例 1 复制
3
2 3 6
1 3
2
输出样例 1
5
输入样例 2 复制
4
1 2 3 4
1 2 3
1 2
1
输出样例 2
4
提示
样例1中:显然最少费用是先从起点0到达第2个站费用为3,然后从第2个站到第3个站费用为2,总费用是3+2=5。
样例2中:最少费用为1+1+1+1=4。
答案如下:
#include <stdio.h>
#include <string.h>
int num =0;
int main()
{
// please define the C++ input here. For example: int a,b; cin>>a>>b;;
// please finish the function body here.
// please define the C++ output here. For example:cout<<____<<endl;
int i,j,m;
int a[100][100]={0,0};
int leng[100] = {0};
scanf("%d",&num);
for(i=0; i<num; i++){
for(j=i+1; j<(num+1);j++){
scanf("%d",&a[i][j]);
}
}
for(i=1; i <= num; i++){
leng[i] = a[0][i];
for(j=i-1;j>0; j--){
if(leng[i]>leng[j]+a[j][i]){
leng[i] = leng[j]+a[j][i];
}
}
}
printf("%d",leng[num]);
return 0;
}