POJ-1163-The Triangle(DP)
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
题意:从第一行走到最后一行(只能走左下或右下),和最大是多少。
思路:动态规划,从最后一行往上走,记录最大的,直到第一行。
1 #include<cstdio> 2 #include<cstring> 3 #include<algorithm> 4 using namespace std; 5 6 int map[105][105]; 7 int dp[105][105]; 8 int n; 9 10 int main(){ 11 while(~scanf("%d",&n)){ 12 13 memset(map,0,sizeof(map)); 14 memset(dp,0,sizeof(dp)); 15 16 for(int i=1;i<=n;i++){ 17 for(int j=1;j<=i;j++){ 18 scanf("%d",&map[i][j]); 19 } 20 } 21 22 for(int i=n;i>=1;i--){ 23 for(int j=0;j<=i;j++){ 24 dp[i][j]=max(dp[i+1][j],dp[i+1][j+1])+map[i][j]; 25 } 26 } 27 printf("%d\n",dp[1][1]); 28 } 29 }