NYOJ 18 The Triangle 填表法,普通dp


題目鏈接:

http://acm.nyist.edu.cn/JudgeOnline/problem.php?pid=18

The Triangle

時間限制: 1000 ms  |  內存限制:65535 KB
難度: 4
 
描述

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



分析:
dp[i][j]=f_max(dp[i+1][j],dp[i+1][j+1])+a[i][j];

代碼如下:

 
#include<bits/stdc++.h>
#define pai 3.1415926535898
using namespace std;
int f_max(int a,int b)
{
    if(a>b)
    {
        return a;
    }else
    {
        return b;
    }
}
int main()
{
    int n;
    scanf("%d",&n);
    int a[n][n];
    memset(a,0,sizeof(a));
    for(int i=0;i<n;i++)
    {
        for(int j=0;j<=i;j++)
        {
            scanf("%d",&a[i][j]);
        }
    }
    int dp[n][n];
    memset(dp,0,sizeof(dp));
    for(int j=0;j<n;j++)
    {
        dp[n-1][j]=a[n-1][j];
    }
    for(int i=n-2;i>=0;i--)
    {
        for(int j=0;j<=i;j++)
        {
            dp[i][j]=f_max(dp[i+1][j],dp[i+1][j+1])+a[i][j];
        }
    }
    printf("%d\n",dp[0][0]);
    return 0;
}
        

 




免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM