POJ 2760: 数字三角形

import java.util.Scanner;
public class Main {
    public static void main(String[] args)
    {
        int[][] triNumbers = new int[101][101];//0-100内
        int[][] triMaxs = new int[101][101]; 

        Scanner in = new Scanner(System.in);
        int nrow = in.nextInt();//行数
        for(int i=0;i<nrow;i++)//行
        {
            for(int j=0;j<=i;j++)//行内
            {
                triNumbers[i][j] = in.nextInt();
            }
        }
        in.close();
        for(int i = nrow-1;i>=0;i--)
        {
            for(int j=i;j>=0;j--)//行内
            {
                if(nrow==i)
                    triMaxs[i][j] = triNumbers[i][j];//最后一行
                else
                    triMaxs[i][j] =  Math.max(triMaxs[i+1][j], triMaxs[i+1][j+1])+triNumbers[i][j];
            }
        }
        System.out.println(triMaxs[0][0]);
    }
}

题目:

总时间限制: 
1000ms

内存限制: 
65536kB
描述
73   88   1   02   7   4   44   5   2   6   5

(图1)

图1给出了一个数字三角形。从三角形的顶部到底部有很多条不同的路径。对于每条路径,把路径上面的数加起来可以得到一个和,你的任务就是找到最大的和。

注意:路径上的每一步只能从一个数走到下一层上和它最近的左边的那个数或者右边的那个数。

输入
输入的是一行是一个整数N (1 < N <= 100),给出三角形的行数。下面的N行给出数字三角形。数字三角形上的数的范围都在0和100之间。
输出
输出最大的和。
样例输入
5
7
3 8
8 1 0
2 7 4 4
4 5 2 6 5
样例输出
30
来源
翻译自 IOI 1994 的试题
一些些总结:
This problem is adopted in Programming Guide. It adapts dynamic  planning to solving the problem, which takes less space and time than the measure of recursion.
Although the algorithm was described clearly, I still got "WA" when first pubmitted my src.
After I compared the standard answer with mine , I found that the standard one adds 10 to the max boundary of the array.
Well, after checking, I find in the circulation,i or j can be 101,so the max boundary must be no less than 101.
The result always goes back on a careless man...
时间: 2024-12-25 00:52:18

POJ 2760: 数字三角形的相关文章

POJ 1163 数字三角形

Portal:http://poj.org/problem?id=1163 DP经典题,IOI94考题,在各大OJ上都有 1 #include<iostream> 2 #include<algorithm> 3 #include<set> 4 #include<cstdio> 5 #include<cstdlib> 6 #include<cmath> 7 using namespace std; 8 #define FOR(i,j,k

数字三角形-poj

题目要求: 7 3 8 8 1 0 2 7 4 4 4 5 2 6 5 在上面的数字三角形中寻找在上面的数字三角形中寻找一条从顶部到底边的路径,使得路径上所经过的数字之和最大.路径上的每一步都只能往左下或右下走.只需要求出这个最大和即可,不必给出具体路径.  三角形的行数大于1小于等于100,数字为 0 - 99 输入格式: 5 //三角形行数.下面是三角形 7 3 8 8 1 0 2 7 4 4 4 5 2 6 5 解题思路: 用二维数组存放数字三角形 D[r][j] //表示第i行第j个元素

POJ 3176-Cow Bowling(dp_数字三角形)

Cow Bowling Time Limit:1000MS     Memory Limit:65536KB     64bit IO Format:%I64d & %I64u Submit Status 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 st

POJ_3176_Cow_Bowling(数字三角形)

描述 http://poj.org/problem?id=3176 给出一个三角形,每个点可以走到它下面两个点,将所有经过的点的值加起来,问最大的和是多少. 分析 1 #include<cstdio> 2 #include<cstring> 3 #include<algorithm> 4 using std :: max; 5 6 const int maxn=355; 7 int a[maxn][maxn],f[maxn][maxn]; 8 int n; 9 10 i

数字三角形

数字三角形必须经过某一个点,使之走的路程和最大 输入格式: 第1行n,表示n行 (n<=25), 第2到n+1行为每个的权值,第n+2行为两个数x,y表示必须经过的点 输出格式: 输出最大值 样例1 输入: 2 1 1 1 1 1 输出: 2 //11 月 23 日 2015 #include <stdio.h> int num[26][26];//存储数字三角形的权值 int route[26][2];//记录临时最优路径 int n; int s1,s2;//以特殊点分为上半段和下半

蓝桥杯 算法训练 ALGO-124 数字三角形

算法训练 数字三角形 时间限制:1.0s   内存限制:256.0MB 问题描述 (图3.1-1)示出了一个数字三角形. 请编一个程序计算从顶至底的某处的一条路 径,使该路径所经过的数字的总和最大. ●每一步可沿左斜线向下或右斜线向下走: ●1<三角形行数≤100: ●三角形中的数字为整数0,1,-99: . (图3.1-1) 输入格式 文件中首先读到的是三角形的行数. 接下来描述整个三角形 输出格式 最大总和(整数) 样例输入 573 88 1 02 7 4 44 5 2 6 5 样例输出 3

4829 [DP]数字三角形升级版

4829 [DP]数字三角形升级版 时间限制: 1 s 空间限制: 16000 KB 题目等级 : 黄金 Gold 题解 题目描述 Description 从数字三角形的顶部(如图,第一行的5表示行数)到底部有很多条不同的路径.对于每条路径,把路径上面的数加起来可以得到一个和,且!!!!!!!!! ================================================================================== =================

各种数字三角形

数字三角形 经典例题,有记忆化搜索,正推,逆推三种方法 如果记录路径,可以开一个数组记录状态是由哪个子状态推出来的 #include<iostream> #include<cstdio> #include<string> #include<cstring> #include<algorithm> using namespace std; const int maxn = 200; int n,dp[maxn][maxn],value[maxn][

【递归】数字三角形 简单dp

[递归]数字三角形 题目描述 对于大多数人来说,“我们是这么的正常,因此也就这么的平庸.”而天才总是与众不同的,所以当邪狼问修罗王:“老大,你蹲在那儿一动不动看了有半个小时了,蚂蚁有那么好看吗?” 修罗王是这样回答的:“我在思索人生的意义,你看这蚂蚁的面前有无数的道路选择,但它不知道选择哪条路可以到达目标,也不知道哪条路上有更多的食物,更不知道现在选择的道路对它以后的影响……” 如图所示,有一个层数为n(n≤1000)的数字三角形.现有一只蚂蚁从顶层开始向下走,每走下一级时,可向左下方向或右下方