poj 1163 The Triangle

7
3   8
8   1   0
2   7   4   4
4   5   2   6   5

(Figure 1)
Figure 1 shows a number triangle. Write a program that calculates the highest sum of numbers passed on a route that starts at the top and ends somewhere on the base. Each step can go either diagonally down to the left or diagonally down to the right.
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

#include<iostream>
#include<algorithm>
using namespace std;
int a[103][103];
int main()
{
    int n;
    while(cin>>n)
    {
        for(int i=0;i<=n+1;i++)   //将数组边界初始化为0
        {
            for(int j=0;j<=n+1;j++)
            {
                a[i][j]=0;
            }
        }
        for(int i=1;i<=n;i++)
        {
            for(int j=1;j<=i;j++)
            {
                cin>>a[i][j];
            }
        }
        for(int i=n;i>=1;i--)
        {
            for(int j=1;j<=i;j++)
            {
                a[i-1][j]+=max(a[i][j],a[i][j+1]);
            }
        }
        cout<<a[1][1]<<endl;

    }
}

阅读更多
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页