poj 1163解题报告(动态规划)

原创 2012年03月29日 12:08:20
//要求输入一个组阶梯数,求从顶层到最底层的最大和,每个连接只能为该层数字到下层左下数字或右下数字的路径。
  	  7
	3   8
      8   1   0
    2   7   4   4
  4   5   2   6   5
//最大和路径为 7,3,8,7,5之和为30
//思路:maxsum[i,j]为第i行,第j个数的最大和,tr[i,j]为第i行第j个数
//maxsum[i,j]=max(maxsum[i-1,j-1]+tr[i-1,j-1],maxsum[i-1,j]+tr[i-1,j])
//最后的结果就为第N行的所有最大和中最大的一个。
#include <iostream>
using namespace std;
short tr[5051],maxsum[5051];
int main()
{
	int N;
	cin>>N;
	for(int i=1;i<=N*(N+1)/2;++i)
	{
		cin>>tr[i];
	}
	/*for(int i=1;i<=N*(N+1)/2;++i)
	{
	cout<<tr[i]<<" ";
	}*/
	maxsum[0]=0;
	tr[0]=0;
	maxsum[1]=tr[1];
	if (N==1)
	{
		cout<<maxsum[1];
		return 0;
	}

	for (int i=2;i<=N;++i)
	{
		for (int j=1;j<=i;++j)
		{
			if (j==1)
			{
				maxsum[i*(i-1)/2+j]=maxsum[i*(i-1)/2-(i-2)]+tr[i*(i-1)/2+j];   //当为每行第一个数时,只能有上一行的第一个数得到
			}
			else if(j==i)
			{
				maxsum[i*(i-1)/2+j]=maxsum[i*(i-1)/2]+tr[i*(i-1)/2+j];   //每行最后一个数也只能由上一行的最后一个数得到
			}
			else
			{
				if(maxsum[(i-2)*(i-1)/2+j-1]>maxsum[(i-2)*(i-1)/2+j])
				{
					maxsum[i*(i-1)/2+j]=maxsum[(i-2)*(i-1)/2+j-1]+tr[i*(i-1)/2+j];
				}
				else
				{
					maxsum[i*(i-1)/2+j]=maxsum[(i-2)*(i-1)/2+j]+tr[i*(i-1)/2+j];
				}
			}
			
		}
	}
	/*for (int i=1;i<=N;++i)
	{
		for (int j=1;j<=i;++j)
		{
			cout<<maxsum[i*(i-1)/2+j]<<" ";
		}
		cout<<endl;
	}*/
	int max_sum=0;
	for (int j=1;j<=N;++j)
	{
		if (maxsum[N*(N-1)/2+j]>max_sum)
		{
			max_sum=maxsum[N*(N-1)/2+j];

		}
	}
	cout<<max_sum;
	return 0;
}


版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

POJ1088动态规划+递归解题报告

题目链接:摸我看完题目会有一些比较直观的想法,显然是用DP,迭代公式也比较好想,f(i,j) = max{ f(i-1,j), f(i+1,j), f(i,j-1), f(i,j-1) } + 1在上...

动态规划Always On the Run poj 1476解题报告(附详细分析)

这道是动态规划,动态方程不难想,只是要实现数据的录入需要一些技巧。 以第i次飞行和第m个城市作为状态dp 动态转移方程:dp[i][m] = min {dp[i][m] ,,dp[i-1][j]+ma...

POJ 1088 滑雪(动态规划)(解题报告)

Description Michael喜欢滑雪百这并不奇怪, 因为滑雪的确很刺激。可是为了获得速度,滑的区域必须向下倾斜,而且当你滑到坡底,你不得不再次走上坡或者等待升降机来载你。Michael...

POJ-1088-滑雪-解题报告-动态规划-记忆化搜索

在给出这道题的解题报告之前,先看下记忆化搜索的个人理解。 以最简单的递归求阶乘的函数进行说明。 常见的求阶乘的代码是这样的: int fac(int n) { if(n == 1) ret...

Codeforces 429B Working out (动态规划) -- 解题报告

题目链接题目大意两个人在一个有 n×m 个房间的健身房内健身,每个房间都有一个锻炼可消耗的卡路里数。一个人从 a[1][1] 一路锻炼到 a[n][m] ,每次只能从 a[i][j] 移动到 a[i+...

Codevs5288 航线设计(动态规划加强版) 解题报告

【问题描述】        有一个国家被一条河划分为南北两部分,在南岸和北岸总共有N对城镇,每一城镇在对岸都有唯一的友好城镇。任何两个城镇都没有相同的友好城镇。每一对友好城镇都希望有一条航线来往。于是...

石子合并(动态规划)详细解题报告

石子合并(动态规划)详细解题报告 作者:快报    文章来源:本站原创    点击数:9772    更新时间:2005-10-12   &...

5月6日动态规划测试解题报告

5月6日动态规划测试解题报告 --written by:邹祯 第一题:免费馅饼Problem descriptio...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)