【动态规划】【水】nod1083 矩阵取数问题

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

1 3 3
2 1 3
2 2 1

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

思路

同nod1002,将元素按位置分为以下三类考虑:

  • 第一行第一个。
  • 第一行第2-n个。
  • 除第一行外每行第一个。
    出口一定是最后一行(仔细思考为什么),最后扫一遍最后一行,输出最大值即可。

代码

import java.io.*;

public class nod1083 {
    public static void main(String[] args) throws IOException {
        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in), 1 << 16);
        BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(System.out), 1 << 16);
        int N = Integer.parseInt(reader.readLine());
        String[] s = reader.readLine().split("\\s+");
        int[][] f = new int[N][N];
        f[0][0] = Integer.parseInt(s[0]);
        for(int j = 1; j < N; j++){
            f[0][j] = f[0][j - 1] + Integer.parseInt(s[j]);
        }
        for(int i = 1; i < N; i++){
            s = reader.readLine().split("\\s+");
            f[i][0] = f[i - 1][0] + Integer.parseInt(s[0]);
            for(int j = 1; j < N; j++){
                f[i][j] = Math.max(f[i - 1][j], f[i][j - 1]) + Integer.parseInt(s[j]);
            }
        }
        writer.write(f[N - 1][N - 1] + "");
        writer.flush();
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值