练习三 1006

来源:互联网 发布:淘宝电商运营专才认证 编辑:程序博客网 时间:2024/05/16 10:52

概述:数塔,要求从顶层走到底层,若每一步只能走到相邻的结点,则经过的结点的数字之和最大是多少?

思路:做这个题,有两种思路,一是自上而下(也是大多数人的做法),二是从下向上反推。因为塔顶只有一个元素,显然从下向上递归比较方便,因为都会递归到一个元素上。

感想:要从多种解题方法中“寻找最优解”。

#include<iostream>#include<fstream>#include<cstring>#include<algorithm>using namespace std;const int MAX = 100;int map[MAX][MAX];int ans[MAX][MAX];int main(){//ifstream cin("aaa.txt");int N;cin >> N;while (N--){int n;memset(map, 0, sizeof(map));cin >> n;for (int i = 0; i<n; ++i)for (int j = 0; j<=i; ++j)cin >> map[i][j];for (int i = n - 1; i >= 0; i--)for (int j = 0; j <= i; j++)map[i][j] += max(map[i + 1][j + 1], map[i + 1][j]);cout << map[0][0] << endl;}return 0;}


0 0