• POJ 3176, Cow Bowling


    Time Limit: 1000MS  Memory Limit: 65536K
    Total Submissions: 5823  Accepted: 3802


    Description
    The cows don't use actual bowling balls when they go bowling. They each take a number (in the range 0..99), though, and line up in a standard bowling-pin-like triangle like this:

              7

            3   8

          8   1   0

        2   7   4   4

      4   5   2   6   5
    Then the other cows traverse the triangle starting from its tip and moving "down" to one of the two diagonally adjacent cows until the "bottom" row is reached. The cow's score is the sum of the numbers of the cows visited along the way. The cow with the highest score wins that frame.

    Given a triangle with N (1 <= N <= 350) rows, determine the highest possible sum achievable.

     

    Input
    Line 1: A single integer, N

    Lines 2..N+1: Line i+1 contains i space-separated integers that represent row i of the triangle.

     

    Output
    Line 1: The largest sum achievable using the traversal rules

     

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

     

    Sample Output
    30

     

    Hint
    Explanation of the sample:

              7

             *

            3   8

           *

          8   1   0

           *

        2   7   4   4

           *

      4   5   2   6   5
    The highest score is achievable by traversing the cows as shown above.

     

    Source
    USACO 2005 December Bronze


    // POJ3176.cpp : Defines the entry point for the console application.
    //

    #include 
    <iostream>
    #include 
    <algorithm>
    using namespace std;

    int main(int argc, char* argv[])
    {
        
    int N;
        scanf(
    "%d"&N);

        
    int balls[350][350];
        
    for (int i = 0; i < N; ++i)
            
    for (int j = 0; j <=i; ++j) scanf("%d"&balls[i][j]);


        
    int DP[350];
        memset(DP, 
    0sizeof(DP));

        DP[
    0= balls[0][0];
        
    for (int i = 1; i < N; ++i)
            
    for (int j = i; j >=0--j)
            {
                
    if(j == i) DP[j] = DP[j - 1+ balls[i][j];
                
    else if (j == 0)  DP[j] = DP[j] + balls[i][j];
                
    else
                    DP[j] 
    = max(DP[j - 1],DP[j]) + balls[i][j];
            };

        cout 
    << *max_element(&DP[0], &DP[N])<<endl;
        
    return 0;
    }

  • 相关阅读:
    MySQL运维案例分析:Binlog中的时间戳
    身边有位“别人家的程序员”是什么样的体验?
    苹果收取30%过路费_你是顶是踩?
    1019 数字黑洞 (20 分)C语言
    1015 德才论 (25 分)C语言
    1017 A除以B (20 分)C语言
    1014 福尔摩斯的约会 (20 分)
    求n以内最大的k个素数以及它们的和、数组元素循环右移问题、求最大值及其下标、将数组中的数逆序存放、矩阵运算
    1005 继续(3n+1)猜想 (25 分)
    爬动的蠕虫、二进制的前导的零、求组合数、Have Fun with Numbers、近似求PI
  • 原文地址:https://www.cnblogs.com/asuran/p/1582443.html
Copyright © 2020-2023  润新知