【动态规划】The Triangle

<center>

问题 E: 【动态规划】The Triangle

时间限制: 1 Sec  内存限制: 128 MB
提交: 24  解决: 24
[提交][状态][讨论版]
</center>

题目描述

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.

输入

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.

输出

Your program is to write to standard output. The highest sum is written as an integer.

样例输入

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

样例输出

30
解题思路:首先从上往下是i到n-1,从左往右是j到i;
  要从上往下加,先看最上面的7,可以加3等于10,可以加8等于15;
  然后看第三行当j等于0,只能加到它右上方那个上,当j=i,只能加到左上方那个数上。
  当j!=0或i的时候,可以加到左上方,可以加到右上方,但要求最后的和最大,所以要加到和大的那一个上面。
  并且加到大的那一个上这一决策对之后的没有影响,无后效性。
  状态转移方程为:sum[i][j]=max(sum[i-1][j],sum[i-1][j-1])+a[i][j];
  从上到下,从左到右依次遍历,最后一行其中一个数上会有最大值。
  便利最后一行sum[i],找出最大值。

#include <iostream>
#include <cstdio>

using namespace std;

int main()
{
    int a[101][101];
    int sum[101][101];
    int n;
    int maxx;
    while(scanf("%d",&n)!=EOF){
        for(int i=0;i<n;i++){
            for(int j=0;j<i+1;j++){
                scanf("%d",&a[i][j]);
            }
        }
        sum[0][0]=a[0][0];
        for(int i=1;i<n;i++){
            for(int j=0;j<i+1;j++){
                if(j==0){
                    sum[i][j]=sum[i-1][j]+a[i][j];
                }
                if(j==i){
                    sum[i][j]=sum[i-1][i-1]+a[i][j];
                }
                sum[i][j]=max(sum[i-1][j],sum[i-1][j-1])+a[i][j];
            }
        }
        maxx=0;
        for(int i=0;i<n;i++){
            if(maxx<sum[n-1][i]){
                maxx=sum[n-1][i];
            }
        }
        printf("%d\n",maxx);
    }
    return 0;
}

 

全部评论

相关推荐

ProMonkey2024:5个oc?厉害! 但是有一个小问题:谁问你了?😡我的意思是,谁在意?我告诉你,根本没人问你,在我们之中0人问了你,我把所有问你的人都请来 party 了,到场人数是0个人,誰问你了?WHO ASKED?谁问汝矣?誰があなたに聞きましたか?누가 물어봤어?我爬上了珠穆朗玛峰也没找到谁问你了,我刚刚潜入了世界上最大的射电望远镜也没开到那个问你的人的盒,在找到谁问你之前我连癌症的解药都发明了出来,我开了最大距离渲染也没找到谁问你了我活在这个被辐射蹂躏了多年的破碎世界的坟墓里目睹全球核战争把人类文明毁灭也没见到谁问你了(别的帖子偷来的,现学现卖😋)
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务