zoukankan      html  css  js  c++  java
  • 【hihoCoder】1037 : 数字三角形

    题目http://hihocoder.com/problemset/problem/1037

    • 一个迷宫有n层,第 i 层有 i 个房间
    • 从第i层的第i个房间(i, i)可以走到第i+1层的第i个房间或第i+1房间(i+1, i)/(i+1, i+1)
    • 每个房间走出去后都不能回头

    样例输入

    5 //迷宫的层数
    2
    6 4
    1 2 8
    4 0 9 6
    6 5 5 3 6
    结果: 28
    思路
    动态规划
    maze[i, j] = max(maze[i-1, j], maze[i-1, j-1])

    源码
    • 迭代方式,从下而上
     1 #include <iostream>
     2 using namespace std;
     3 
     4 static int maze[100][100];//存储到达每一个房间收集到的最多券
     5 static int data[100][100];//存储每一个房间的券
     6 
     7 int main()
     8 {
     9     int maxLevel, i = 0, max = 0;
    10     cin >> maxLevel;
    11     
    12     for (i = 0; i < maxLevel; i++)
    13         for (int j = 0; j <= i; j++)
    14             cin >> data[i][j];
    15     //由低层到高层计算
    16     maze[0][0] = data[0][0];
    17     for (int i = 1; i < maxLevel; i++)
    18     {
    19         for (int j = 0; j <= i; j++)
    20         {
    21             if (j > 0 && maze[i - 1][j] < maze[i - 1][j - 1])
    22                 maze[i][j] = maze[i - 1][j - 1];
    23             else
    24                 maze[i][j] = maze[i - 1][j];
    25             maze[i][j] += data[i][j];
    26         }
    27     }
    28     //找出最后一层中券最多的房间
    29     for (i = 0; i < maxLevel; i++)
    30     {
    31         int tmp = maxLevel - 1;
    32         if (max < maze[tmp][i])
    33             max = maze[tmp][i];
    34     }
    35     cout << max << endl;
    36     return 0;
    37 }
    View Code
    • 递归方式,从上而下
     1 #include <iostream>
     2 using namespace std;
     3 
     4 int maze[100][100];
     5 int data[100][100];
     6 void dp(int level)
     7 {
     8     if (level < 0)
     9         return;
    10     dp(level - 1);
    11     for (int room = 0; room <= level; room++)
    12     {
    13         if (level > 0)
    14         {
    15             if (room > 0)
    16                 maze[level][room] = maze[level - 1][room] > maze[level - 1][room - 1] ? maze[level - 1][room] : maze[level - 1][room - 1];
    17             else
    18                 maze[level][room] = maze[level - 1][room];
    19         }
    20         else
    21             maze[level][room] = 0;
    22         maze[level][room] += data[level][room];
    23     }
    24 }
    25 int main()
    26 {
    27     int maxLevel, i = 0, max = 0;
    28     cin >> maxLevel;
    29     
    30     for (i = 0; i < maxLevel; i++)
    31         for (int j = 0; j <= i; j++)
    32             cin >> data[i][j];
    33     dp(maxLevel - 1);
    34     for (i = 0; i < maxLevel; i++)
    35     {
    36         int tmp = maxLevel - 1;
    37         if (max < maze[tmp][i])
    38             max = maze[tmp][i];
    39     }
    40     cout << max << endl;
    41     return 0;
    42 }
    View Code
  • 相关阅读:
    00045_多态-转型
    js下载文件夹的解决方案
    b/s下载文件夹的解决方案
    web下载文件夹的解决方案
    jsp下载文件夹的解决方案
    php下载文件夹的解决方案
    asp.net下载文件夹的解决方案
    KindEditor 从word中复制内容带多张图片
    CKEditor 从word中复制内容带多张图片
    Web编辑器 从word中复制内容带多张图片
  • 原文地址:https://www.cnblogs.com/coolqiyu/p/5700899.html
Copyright © 2011-2022 走看看