The Triangle
Time Limit: 1000MS | Memory Limit: 10000K | |
Total Submissions: 48243 | Accepted: 29173 |
Description
7
3 8
8 1 0
2 7 4 4
4 5 2 6 5
(Figure 1)
Input
Your program is to read from standard input. The first line contains one integer N: the number of rows in the triangle. The following N lines describe the data of the triangle. The number of rows in the triangle is > 1 but <= 100. The numbers in the triangle, all integers, are between 0 and 99.
Output
Your program is to write to standard output. The highest sum is written as an integer.
Sample Input
5
7
3 8
8 1 0
2 7 4 4
4 5 2 6 5
Sample Output
30
Source
IOI 1994
---------------------------------华丽的分割线-------------------------------
解题思路:
题目是求这个数字三角形从上到下(或者相反)的一条路径的最大和。
状态转移方程:
DP[I][J]=MAX(DP[I+1][J],DP[I+1][J+1])+POINT[I][J].
Code:
---------------------------------华丽的分割线-------------------------------
解题思路:
题目是求这个数字三角形从上到下(或者相反)的一条路径的最大和。
状态转移方程:
DP[I][J]=MAX(DP[I+1][J],DP[I+1][J+1])+POINT[I][J].
Code:
#include<stdio.h>
#include<cstring>
int tri[102][102];
int dp[102][102];
int i,j,k,n,m,p,t;
int main()
{
memset(tri,0,sizeof(tri));
memset(dp,0,sizeof(dp));
scanf("%d",&n);
for(i=1;i<=n;i++)
for(j=1;j<=i;j++)
scanf("%d",&(tri[i][j]));
for(i=n;i>=1;i--)
for(j=n-(n-i);j>=1;j--)
dp[i][j]=dp[i+1][j]>dp[i+1][j+1]?dp[i+1][j]+tri[i][j]:dp[i+1][j+1]+tri[i][j];
printf("%d\n",dp[1][1]);
return 0;
}