矩阵取数问题

来源:互联网 发布:美利坚仓储淘宝王 网盘 编辑:程序博客网 时间:2024/06/05 11:16

题目描述:

一个N*N矩阵中有不同的正整数,经过这个格子,就能获得相应价值的奖励,从左上走到右下,只能向下向右走,求能够获得的最大价值。
例如:3 * 3的方格。


1 3 3
2 1 3
2 2 1


能够获得的最大价值为:11。


输入


第1行:N,N为矩阵的大小。(2 <= N <= 500)
第2 - N + 1行:每行N个数,中间用空格隔开,对应格子中奖励的价值。(1 <= N[i] <= 10000)


输出


输出能够获得的最大价值。


输入示例


3
1 3 3
2 1 3
2 2 1


输出示例


11


import java.util.Scanner;public class MatrixNumber {    public static void main(String[] args) {        Scanner scanner = new Scanner(System.in);        int n = scanner.nextInt();        int[][] a = new int[n][n];        int[][] f = a;        for (int i = 0; i < n; i++) {            for (int j = 0; j < n; j++) {                a[i][j] = scanner.nextInt();            }        }        f[0][0] = a[0][0];        for (int i = 1; i < n; i++) {            f[0][i] = f[0][i-1] + a[0][i];            f[i][0] = f[i-1][0] + a[i][0];        }        for (int i = 1; i < n; i++) {            for (int j = 1; j < n; j++) {                f[i][j] = Math.max(f[i-1][j], f[i][j-1]) + a[i][j];            }        }        System.out.println(f[n-1][n-1]);    }}