• 数字保龄球01


    题目:
    第一行输入一个数字n,代表这个数字三角形一共有几行;
    接下来的n行,第i行输入i个数字;//例如第三行就输入三个数字
    然后寻找一条从顶部到底边的路径,是的路径上所经过的数字之和最大,路径上的每一步只能往左下走或者右下走;求出最大和。不必给出具体路径,三角形行数大于1小于100,数字为0到99;

    输入例子:(自行脑补为三角形,哈哈哈)
    5
    7
    3 8
    8 1 0
    2 7 4 4
    4 5 2 6 5

    输出:
    30

    1.记忆递归型

    #include <iostream>
    #include <conio.h>
    #include <cstdio>
    #include <stdio.h>
    #include <algorithm>
    #include <math.h>
    using namespace std;
    
    #define MAX 101
    
    int aa[MAX][MAX];
    int n;
    int maxans[MAX][MAX];
    
    int maxsum(int i, int j)
    {
    	if (maxans[i][j] != -1)
    		return maxans[i][j] = aa[i][j];
    	if (i == n)
    		maxans[i][j] = aa[i][j];
    	else
    	{
    		int a = maxsum(i + 1, j);
    		int b = maxsum(i + 1, j + 1);
    		maxans[i][j] = max(a,b) + aa[i][j];
    	}
    	return maxans[i][j];
    }
    
    int main()
    {
    	int i, j;
    	cin >> n;
    	for (i = 1; i <= n; i++)
    	{
    		for (j = 1; j <= i; j++)
    		{
    			cin >> aa[i][j]; maxans[i][j]=-1;
    		}
    	}
    	cout << maxsum(1, 1) << endl;
    }
    

    2.递推型

    //递推型
    int main()
    {
    	int i, j;
    	int n;
    	int maxans[MAX][MAX];
    	int aa[MAX][MAX];
    	cin >> n;
    	for (i = 1; i <= n; i++)
    		for (j = 1; j <= i; j++)
    			cin >> aa[i][j];
    	for (i = 1; i <= n; i++)
    		maxans[n][i] = aa[n][i];
    	for (i = n - 1; i >= 1; i--)
    		for (j = 1; j <= i; j++)
    			maxans[i][j] = max(maxans[i + 1][j], maxans[i + 1][j + 1]) + aa[i][j];
    	cout << maxans[1][1] << endl;
    }
    

    解析:

    • 将最后一排数字直接复制到maxans数组中,然后在比较相邻数字的大小,用最大的数字相加上一行的数字然后保存;

    作者:Better又
    出处:https://www.cnblogs.com/lwyy1223-/
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

  • 相关阅读:
    用FileSystemWatcher监视文件系统
    生成随机汉字验证码
    MySQL学习笔记二
    python高级学习笔记
    boost bind 表达式中的是值语义还是指针语义?
    容器与适配器的个人总结
    subversion linux使用方法
    boost asio(初学示例)
    MySQL学习笔记一
    subversion 命令
  • 原文地址:https://www.cnblogs.com/lwyy1223-/p/12918169.html
Copyright © 2020-2023  润新知