首页 > 其他 > 详细

[hiho 05]数字三角形

时间:2015-04-25 22:28:15      阅读:344      评论: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
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!