foj 1004 Number Triangle

好久没更新了。

网站

题意很好理解,就是从头加到尾,看哪个比较大,将值输出出来。

我这边主要运用动态规划,

重新设一个数组用来存总和,选择其中大的加起来。
最后输出最后一行的最大值
主要要注意题目的范围大小

#include<iostream>
using namespace std;
	int a[1001][1001];
	int b[1001][1001];
int main()
{
	int n;
	int i,j;
	int max=0;
	while(cin>>n)
	{
		for(i=0;i<n;i++)
		for(j=0;j<i+1;j++)
		{
			cin >> a[i][j];
		}
	b[0][0]=a[0][0];
	for(i=1;i<n;i++)
	{
		for(j=0;j<=i;j++)
		{
			if(j==i)
			{
				b[i][j]=a[i][j]+b[i-1][j-1];
			}
			else if(j==0)
			{
				b[i][j]=a[i][j]+b[i-1][j];
			}
			else 
			{
				b[i][j]=(b[i-1][j]>b[i-1][j-1]) ? b[i-1][j]+a[i][j]:b[i-1][j-1]+a[i][j];
			}
		}
	}
	for(i=0;i<n;i++)
	{
		if(b[n-1][i]>max) max=b[n-1][i];
	}
	cout << max<<endl;
	for(i=0;i<n;i++){
		for(j=0;j<i+1;j++)
		{
			a[i][j]=0;
			b[i][j]=0;
		}
	}
	max=0;
	}
	return 0;	
}

posted on 2017-04-24 00:53  linese-d  阅读(189)  评论(0)    收藏  举报

导航