您的位置:首页 > 其它

【hihoCoder】1037 : 数字三角形

2016-07-24 15:35 375 查看
题目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])

源码


迭代方式,从下而上

#include <iostream>
using namespace std;

int maze[100][100];
int data[100][100];
void dp(int level)
{
if (level < 0)
return;
dp(level - 1);
for (int room = 0; room <= level; room++)
{
if (level > 0)
{
if (room > 0)
maze[level][room] = maze[level - 1][room] > maze[level - 1][room - 1] ? maze[level - 1][room] : maze[level - 1][room - 1];
else
maze[level][room] = maze[level - 1][room];
}
else
maze[level][room] = 0;
maze[level][room] += data[level][room];
}
}
int main()
{
int maxLevel, i = 0, max = 0;
cin >> maxLevel;

for (i = 0; i < maxLevel; i++)
for (int j = 0; j <= i; j++)
cin >> data[i][j];
dp(maxLevel - 1);
for (i = 0; i < maxLevel; i++)
{
int tmp = maxLevel - 1;
if (max < maze[tmp][i])
max = maze[tmp][i];
}
cout << max << endl;
return 0;
}


View Code
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: