• 【3-4】数字三角形问题


    ´问题描述:
    给定一个由 n 行数字组成的数字三角形如下图所示。试设计一个算法,计算出从三角形
    的顶至底的一条路径,使该路径经过的数字总和最大。
    7
    3 8
    8 1 0
    2 7 4 4
    4 5 2 6 5
    ´编程任务:
    对于给定的由 n 行数字组成的数字三角形,编程计算从三角形的顶至底的路径经过的数
    字和的最大值。
    ´数据输入:
    由文件 input.txt 提供输入数据。文件的第 1 行是数字三角形的行数 n,1£n£100。接下
    来 n 行是数字三角形各行中的数字。所有数字在 0..99 之间。
    ´结果输出:
    程序运行结束时,将计算结果输出到文件 output.txt 中。文件的第 1 行中的数是计算
    出的最大值。
    输入文件示例 输出文件示例
    input.txt output.txt
    5
    7
    3 8
    8 1 0
    2 7 4 4
    4 5 2 6 5
    30

    【题解】

    /* 设f[i][j]表示从(1,1)走到(i,j)的最大值 f[i][j] = max(f[i-1][j],f[i-1][j-1])+a[i][j]; */

    【代码】

    #include <cstdio>
    #include <iostream>
    #include <cstring>
    #include <algorithm>
    using namespace std;
    
    const int N = 100;
    
    int f[N + 10][N + 10];
    int n, a[N + 10][N + 10];
    
    int main() {
    	//freopen("C://Users//Administrator//Desktop//测试数据//ch3//prog34//test//tri6.in","r",stdin);
    	cin >> n;
    	for (int i = 1;i <= n;i++)
    		for (int j = 1; j <= i; j++) {
    			cin >> a[i][j];
    		}
    	f[1][1] = a[1][1];
    	for (int i = 2; i <= n; i++) {
    		for (int j = 1; j <= i; j++) {
    			f[i][j] = max(f[i - 1][j], f[i - 1][j - 1]) + a[i][j];
    		}
    	}
    	int ans = f[n][1];
    	for (int i = 1; i <= n; i++) {
    		ans = max(ans, f[n][i]); 
    	}
    	cout << ans << endl;
    	return 0;
    }
    
    
  • 相关阅读:
    Redis环境搭建(整合SprinigBoot一键切换集群和单机环境)
    Docker + SpringBoot2.0快速构建镜像
    kafka实现分布式事务
    【本地事物】
    【数据结构之二叉树】
    变量
    python 介绍
    编程语言的区别
    路飞学城python教程 第二章练习题
    windows下nginx配合ffmpeg推送视频流
  • 原文地址:https://www.cnblogs.com/AWCXV/p/11665414.html
Copyright © 2020-2023  润新知