栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

java 牛客网之[动态规划 中等]NC6 【模板】二维前缀和

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

java 牛客网之[动态规划 中等]NC6 【模板】二维前缀和

题目的链接在这里:https://www.nowcoder.com/practice/99eb8040d116414ea3296467ce81cbbc

目录
  • 题目大意
  • 一、示意图
  • 二、解题思路
    • 前缀和固定套路


题目大意 给你一个 n 行 m 列的矩阵 A ,下标从1开始。

接下来有 q 次查询,每次查询输入 4 个参数 x1 , y1 , x2 , y2

请输出以 (x1, y1) 为左上角 , (x2,y2) 为右下角的子矩阵的和,


一、示意图

二、解题思路
前缀和固定套路
前缀和固定套路

代码如下:

import java.util.*;

public class  Main{
   public static void main(String[] args) {
        
        Scanner sc=new Scanner(System.in);
        int n=sc.nextInt();
        int m=sc.nextInt();
        int q=sc.nextInt();
        //然后创建一个数组 用来存数据
        long[][] target=new long[n][m];
        //然后一个对应合 试试看能不能求
        long[][] sum=new long[n][m];
        //然后开始输入
        for(int i=0;i0){
            q--;
            int x1=sc.nextInt();
            int y1=sc.nextInt();
            int x2=sc.nextInt();
            int y2=sc.nextInt();
            //然后就用那个sum表示的是 0 0到 i j的方法就方程进行拆分
            //需要的值等于   sum[x2][y2]-sum[x2][y1]-sum[x1][y2]+sum[x1][y1] 画图可知
            //结果图分析可知
            //需要的是-2 sum[x2-1][y2-1]-sum[x2-1][y1-1]-sum[x1-1][y2-1]+sum[x1-1][y1-1]
            if(x1==1&&y1==1){
                System.out.println(sum[x2 - 1][y2 - 1]);
                continue;
            }
            if(x1==1){
                //如果是x1在第一层的话
                System.out.println(sum[x2 - 1][y2 - 1] - sum[x2 - 1][y1 - 2] );
                continue;

            }
            if(y1==1){
                System.out.println(sum[x2 - 1][y2 - 1]  - sum[x1 - 2][y2 - 1] );
                continue;
            }
                System.out.println(sum[x2 - 1][y2 - 1] - sum[x2 - 1][y1 - 2] - sum[x1 - 2][y2 - 1] + sum[x1 - 2][y1 - 2]);
            
        }


    }
}


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/396758.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号