The triangle

#include<iostream>
#include<algorithm>
#include<stdio.h>
int Triangle[102][102];
int dp[102][102];
using namespace std;  //yitiao
int main()
{
	int num;
	cin>>num;
	  for(int i=1;i<=num;i++)
		  for(int j=1;j<=i;j++)
		  {
			  scanf("%d",&Triangle[i][j]);
		  }
	   dp[1][1]=Triangle[1][1];int MAX=dp[1][1]; //設置初始值
	   for(int i=2;i<=num;i++)
		   for(int j=1;j<=i;j++)
		   {
			   dp[i][j]=max(dp[i-1][j-1],dp[i-1][j])+Triangle[i][j]; //所有的值只能來自上一行的兩個數,當然邊界的值只能來自一邊,所以另一邊的值全部置爲0
			   if(dp[i][j]>MAX)
				   MAX=dp[i][j]; //判斷最大值可以不用寫
		   }

	   cout<<MAX<<endl;//cout<<*max_element(dp[num],dp[num]+num)<<endl;最大值只出現在最後一行所以用這個判斷再好不過



}

很明顯的動態規劃題目

題目來自:http://acm.nyist.net/JudgeOnline/problem.php?pid=18

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章