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
这是一道典型的dp题;
其状态转移方程:f[i,j]=max(f[i-1,j],f[i-1,j-1])+a[i,j];
注意其边界的处理即可;
#include<iostream> #include<cstdlib> #include<string> #include<algorithm> #include<cstdio> #include<cmath> #include<cstring> #include<stack> #include<queue> #include<iomanip> #include<map> #define pi 3.14159265358979323846 using namespace std; int main() { int N; scanf("%d",&N); int s[101][101]; memset(s,0,sizeof(s)); int ans=0; for(int i=0;i<N;++i) for(int j=0;j<=i;++j) { if(i==0) scanf("%d",&s[i][j]); else { scanf("%d",&s[i][j]); if(j==0) s[i][j]=s[i-1][j]+s[i][j]; else if(j==i) s[i][j]=s[i-1][j-1]+s[i][j]; else s[i][j]=max(s[i-1][j],s[i-1][j-1])+s[i][j]; if(s[i][j]>ans) ans=s[i][j]; } } printf("%d\n",ans); return 0; }