poj1163 The Triangle

 原题链接 http://poj.org/problem?id=1163

 题目大意:从数字三角形中寻找一条从顶部到底边的路径,使得 路径上所经过的数字之和最大。每一步都只能往左下或 右下走,求出这个最大和即可,不必给出具体路径。
#include <iostream> 
#include <algorithm>
using namespace std;
#define MAX 101 
int D[MAX][MAX];  
int n;  
int maxSum[MAX][MAX];
 int main()  {  
  int i,j;  
  cin >> n;  
  for(i=1;i<=n;i++) 
    for(j=1;j<=i;j++)   
      cin >> D[i][j]; 
  for( int i = 1;i <= n; ++ i )   
        maxSum[n][i] = D[n][i]; 
  for( int i = n-1; i>= 1;  --i )   
      for( int j = 1; j <= i; ++j )     
    maxSum[i][j] = max(maxSum[i+1][j],maxSum[i+1][j+1]) + D[i][j]  
  cout << maxSum[1][1] << endl;
  }
这题这没必要用二维maxSum数组存储每一个MaxSum(r,j),只要从底层一行行向上 递推,那么只要一维数组maxSum[100]即可,即只要存储一行的MaxSum值就可以。

#include <iostream>  
#include <algorithm>
using namespace std; 
#define MAX 101 
int D[MAX][MAX];  
int n;
int * maxSum; 
int main(){    
     int i,j;    
     cin >> n;   
 for(i=1;i<=n;i++)  
    for(j=1;j<=i;j++)      
      <span id="transmark"></span>cin >> D[i][j];  
   maxSum = D[n]; //maxSum指向第n行 
   for( int i = n-1; i>= 1;  --i )  
     for( int j = 1; j <= i; ++j )      
       maxSum[j] = max(maxSum[j],maxSum[j+1]) + D[i][j]; 
   cout << maxSum[1] << endl; 
 }





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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值