华为OJ题,动态规划算法,计算最小船费的题目

题目描述

桂林市在阳朔边开辟了若干个旅游景点。一个游船俱乐部在这些景点都设置了游船出租站,游客可在这些游船出租站租用游船,并在下游的任何一个游船出租站归还游船,从一个游船出租站到下游的游船出租站间的租金明码标价。你的任务是为游客计算从起点到终点间的最少租船费用。

解答要求时间限制: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;
}

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值