zoukankan      html  css  js  c++  java
  • 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[i][j]为走到格子(i,j)获得的最大值,那么dp[i][j]=max(dp[i-1][j],dp[i-1][j-1])。最后统计dp[n][i]
    的最大值即为答案。

    #include<iostream>
    #include<cstdio>
    #include<cmath>
    #include<cstdlib>
    #include<algorithm>
    #include<cstring>
    #include <queue>
    #include <vector>
    #include<bitset>
    #include<map>
    #include<deque>
    using namespace std;
    typedef long long LL;
    const int maxn = 5e4+5;
    const int mod = 77200211+233;
    typedef pair<int,int> pii;
    #define X first
    #define Y second
    #define pb push_back
    //#define mp make_pair
    #define ms(a,b) memset(a,b,sizeof(a))
    const int inf = 0x3f3f3f3f;
    #define lson l,m,2*rt
    #define rson m+1,r,2*rt+1
    typedef long long ll;
    #define N 100010
    
    int a[106][105];
    int dp[105][105];
    int main(){
        int n;
        scanf("%d",&n);
        ms(a,0);
        for(int i=1;i<=n;i++){
            for(int j=1;j<=i;j++){
                scanf("%d",&a[i][j]);
            }
        }
    
        for(int i=2;i<=n;i++){
            for(int j=1;j<=i;j++){
    
                a[i][j]+=max(a[i-1][j],a[i-1][j-1]);
            }
        }
        int ans=-1;
        for(int i=1;i<=n;i++) ans=max(ans,a[n][i]);
        cout<<ans<<endl;
        return 0;
    }
     
  • 相关阅读:
    在批处理中调用JS操作MongoDB
    如何利用jQuery post传递含特殊字符的数据
    利用Spring.NET实现WCF的AOP编程
    C#操作MongoDB帮助类
    C#操作MongoDB数据库方法
    利用CORS配置实现jQuery对WebApi及MVC的跨域访问
    利用System.Drawing.Image类进行图片相关操作
    图片预览示例
    文件上传控件(input type='file')对文件类型的过滤
    sysstat工具包之mpstat
  • 原文地址:https://www.cnblogs.com/fht-litost/p/8855272.html
Copyright © 2011-2022 走看看