#yyds干货盘点# 动态规划专题:二维差分

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了#yyds干货盘点# 动态规划专题:二维差分相关的知识,希望对你有一定的参考价值。

1.简述:

描述

给你一个n行m列的矩阵,下标从1开始。接下来有q次操作,每次操作输入5个参数x1, y1, x2, y2, k表示把以(x1, y1)为左上角,(x2,y2)为右下角的子矩阵的每个元素都加上k,请输出操作后的矩阵。

输入描述:

第一行包含三个整数n,m,q.接下来n行,每行m个整数,代表矩阵的元素

接下来q行,每行5个整数x1, y1, x2, y2, k,分别代表这次操作的参数

#yyds干货盘点##yyds干货盘点##yyds干货盘点##yyds干货盘点##yyds干货盘点#

输出描述:

输出n行,每行m个数,每个数用空格分开,表示这个矩阵。

示例1

输入:

2 3 4
1 2 3
4 5 6
1 1 2 2 3
1 2 2 3 -1
1 1 1 3 4
1 1 2 1 1

输出:

9 8 6
8 7 5

2.代码实现:

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();
//存放数组元素
int[][] arr=new int[n][m];
for(int i=0;i<n;i++)
for(int j=0;j<m;j++)
arr[i][j]=sc.nextInt();


//存放增量
long[][] delta=new long[n+2][m+2];
//q次操作
while(q-->0)
int x1=sc.nextInt();
int y1=sc.nextInt();
int x2=sc.nextInt();
int y2=sc.nextInt();
int k=sc.nextInt();
//进行差分处理
delta[x1][y1]+=k;
delta[x1][y2+1]-=k;
delta[x2+1][y1]-=k;
delta[x2+1][y2+1]+=k;


//计算前缀和还原对应元素的增量
for(int i=0;i<n;i++)
for(int j=0;j<m;j++)
delta[i+1][j+1]+=delta[i][j+1];



for(int i=0;i<n;i++)
for(int j=0;j<m;j++)
delta[i+1][j+1]+=delta[i+1][j];
System.out.print(delta[i+1][j+1]+arr[i][j]+" ");

System.out.println();





以上是关于#yyds干货盘点# 动态规划专题:二维差分的主要内容,如果未能解决你的问题,请参考以下文章

#yyds干货盘点# 动态规划专题:数位染色

#yyds干货盘点# 动态规划专题:信封嵌套

#yyds干货盘点# 动态规划专题:小红取数

#yyds干货盘点# 动态规划专题:装箱问题

#yyds干货盘点# 动态规划专题:跳跃游戏

#yyds干货盘点# 动态规划专题:不相邻取数