码迷,mamicode.com
首页 > 其他好文 > 详细

[hiho 05]数字三角形

时间:2015-04-25 22:28:28      阅读:187      评论:0      收藏:0      [点我收藏+]

标签:

题目描述

动态规划的要素是“最优子结构”和“重叠子问题”。

解决问题最重要的是确定“状态”的含义和“转移方程”,以及最终解的状态表示。

 

对于本题而言:

状态 —— V[i, j]这个状态表示从顶(第一层第一个元素)到第i层第j个元素能达到的最大值

转移方程 —— V[i, j] = max(V[i-1, j-1], V[i-1, j]) + x,x是第i层第j个元素的值

最终解的状态表示 —— max(V[n, k]) for all 1<=k<=n,其中 n 是最大层数

 

本题中,由于转移方程只用到了上层的两个状态,所以可以利用滚动数组把状态压缩成一维以减少内存开销。

 

#include <iostream>
#include <algorithm>

using namespace std;

int v[205];

int main() {
	int n;
	cin >> n;
	for (int i = 1; i <= n; i++) {
		int t = 0;
		for (int j = 0; j < i; j++) {
			int x;
			cin >> x;
			int val = max(t, v[j]) + x;
			t = v[j];
			v[j] = val;
		}
	}
	
	int ans = 0;
	for (int j = 0; j < n; j++) {
		ans = max(ans, v[j]);
	}
	cout << ans << endl;

	return 0;
}

 

当然,本题还可以定义别的状态和转移方程,比如用F[i,j]表示从第i层第j个元素出发到达最底层所能达到的最大值等等。

[hiho 05]数字三角形

标签:

原文地址:http://www.cnblogs.com/xblade/p/4456743.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!