数字保龄球01
Posted lwyy1223-
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数字保龄球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数组中,然后在比较相邻数字的大小,用最大的数字相加上一行的数字然后保存;
以上是关于数字保龄球01的主要内容,如果未能解决你的问题,请参考以下文章
Unity3D OpenVR 虚拟现实 保龄球打砖块游戏开发
Unity3D OpenVR 虚拟现实 保龄球打砖块游戏开发