关闭

数字三角形问题

173人阅读 评论(0) 收藏 举报
分类:
#include "iostream"
#include "algorithm"
#include "fstream"
using namespace std;

/*
注意:路径上的每一步只能从一个数走到下一层上和它最近的左边的数或者右边的数。

d[i][j] 表示到达第i行,第j列时,最优路径上数字总和最大值
d[i][j] = max{d[i-1][j], d[i-1][j-1]} + a[i][j] 
d[1][1] = a[1][1];
*/

int d[50][50];
int a[50][50];

int max(int a, int b)
{
    return a>b? a:b;
}

int triangle(int n)
{
    d[1][1] = a[1][1];
    for(int i=2; i<=n; i++)
        for(int j=1; j<=i; j++) 
            d[i][j] = max(d[i-1][j], d[i-1][j-1]) + a[i][j];

    int max = d[n][1];
    for(i=2; i<=n; i++)
        if(max < d[n][i])
            max = d[n][i];
    return max;
}

int main()
{
    ifstream fin("triangle.txt");
    int n;
    cout  << "三角形行数:";
    fin >> n;  cout << n;
    cout << "\n输入三角形:\n";
    for(int i=1; i<=n; i++)
    {
        for(int j=1; j<=i; j++)
        {
            fin >> a[i][j];
            cout << a[i][j] << " ";
        }   
        cout << endl;
    }

    cout << "从顶到底经过的数字总和最大为:" << triangle(n) << endl;
    fin.close();
    return 0;
} 

这里写图片描述

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:266025次
    • 积分:9960
    • 等级:
    • 排名:第1845名
    • 原创:757篇
    • 转载:42篇
    • 译文:4篇
    • 评论:104条
    最新评论