zoukankan      html  css  js  c++  java
  • 【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;
    }
    
    
  • 相关阅读:
    SpringBoot配置文件加载位置及顺序
    linux之开通FTP服务(喂饭级)
    linux之chmod授权
    mysql动态查询上周的数据
    hibernate解读之session--基于最新稳定版5.2.12
    阿里java开发手册中命名规约解读之DO/BO/DTO/VO/AO
    JSP最常用的五种内置对象(out,request,response,session,application)
    JSP执行过程分析
    web.xml解析
    MVC脚手架(一)之javabean+jsp+servlet+jdbc
  • 原文地址:https://www.cnblogs.com/AWCXV/p/11665414.html
Copyright © 2011-2022 走看看