• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
patty-patty
博客园    首页    新随笔    联系   管理    订阅  订阅
G:数字三角形

总时间限制: 1000ms 内存限制: 65536kB
描述
7
3   8
8   1   0
2   7   4   4
4   5   2   6   5

(图1)

图1给出了一个数字三角形。从三角形的顶部到底部有很多条不同的路径。对于每条路径,把路径上面的数加起来可以得到一个和,你的任务就是找到最大的和。

注意:路径上的每一步只能从一个数走到下一层上和它最近的左边的那个数或者右边的那个数。
输入
输入的是一行是一个整数N (1 < N <= 100),给出三角形的行数。下面的N行给出数字三角形。数字三角形上的数的范围都在0和100之间。
输出
输出最大的和。
样例输入
5
7
3 8
8 1 0 
2 7 4 4
4 5 2 6 5
样例输出
30

解析:

  动态规划入门题。设数组bf[i][j]表示从第1行走到第n行第j列所得到的最大和。那么 bf[i][j] += max(bf[i+1][j],bf[i+1][j+1]); 

  bf[0][0]即为最后所求的最大和。代码如下:

 

#include <iostream>
#include <math.h>
using namespace std;

int main()
{
    int bf[105][105];
    int i,j;
    int n;
    cin>>n;
    for(i=0;i<n;i++)
        for(j=0;j<=i;j++)
            cin>>bf[i][j];

    for(i=n-2;i>=0;i--)
        for(j=0;j<=i;j++)
            bf[i][j] += max(bf[i+1][j],bf[i+1][j+1]);

    cout<<bf[0][0]<<endl;
    return 0;
}

 

 

 

posted on 2013-08-09 20:24  patty-patty  阅读(385)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3