第四周1000题解
来源:互联网 发布:sql语句单引号转义 编辑:程序博客网 时间:2024/04/30 03:33
Total Submission(s) : 13 Accepted Submission(s) : 9
Problem Description
在讲述DP算法的时候,一个经典的例子就是数塔问题,它是这样描述的:
有如下所示的数塔,要求从顶层走到底层,若每一步只能走到相邻的结点,则经过的结点的数字之和最大是多少?
已经告诉你了,这是个DP的题目,你能AC吗?
Input
输入数据首先包括一个整数C,表示测试实例的个数,每个测试实例的第一行是一个整数N(1 <= N <= 100),表示数塔的高度,接下来用N行数字表示数塔,其中第i行有个i个整数,且所有的整数均在区间[0,99]内。
Output
对于每个测试实例,输出可能得到的最大和,每个实例的输出占一行。
Sample Input
1
5
7
3 8
8 1 0
2 7 4 4
4 5 2 6 5
思路:
数塔,典型的dp问题,从最高顶点开始,每个点有可以选左点,或者选右点,取其最大者。
package 第四周;import java.util.Scanner;public class Main1000 { public int arr[][];// public int dp(int i, int j) {// dp求最大// if (i >= arr.length - 1)// return arr[i][j];// else// return arr[i][j] + Math.max(dp(i + 1, j), dp(i + 1, j + 1));// } void solve(int n){ for (int i = n - 2; i >= 0; --i){ for (int j = 0; j <= i; ++j){ arr[i][j] += Math.max(arr[i + 1][j], arr[i + 1][j + 1]); } } } public static void main(String args[]) { Scanner sc = new Scanner(System.in); int T = sc.nextInt(); for (int x = 0; x < T; x++) { int N = sc.nextInt(); Main1000 mai = new Main1000(); mai.arr = new int[N][N]; for (int i = 0; i < N; i++) {// 像杨辉三角以一样输入数据 for (int j = 0; j < i + 1; j++) { if(i>=j) mai.arr[i][j] = sc.nextInt(); } } mai.solve(N); System.out.println(mai.arr[0][0]); } }}
0 0
- 第四周1000题解
- 第四周1003题解
- 第四周1002题解
- 第四周1001题解
- LeetCode题解 第四周
- oj第四周作业题解
- LeetCode题解 第十四周
- 第四周
- 第四周
- 第四周
- 第四周
- 第四周
- 第四周
- 第四周
- 第四周
- 第四周
- 第四周
- 第四周
- perl IO::Socket::INET模块
- 常用linux系统监控命令
- emacs-async库简要说明
- scrapy学习--Spiders
- <Android Framework 之路>Android5.1 Camera Framework(二)
- 第四周1000题解
- Java finally语句到底是在return之前还是之后执行?
- 《Java疯狂讲义》中关联、组合和聚合的谬误
- 可变数组NSMutableArray详解
- Scala中类的继承,超类的重载等
- Linux串口编程详解
- 关于html中li的问题
- 如何在Mac上配置/使用Github
- 不只是pulltorefresh才可以下拉刷新