地毯(动态规划以及差分数组)

Posted NightPoetry

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了地毯(动态规划以及差分数组)相关的知识,希望对你有一定的参考价值。

#include<iostream>
#include<algorithm>
using namespace std;
int n,m;
int v[1001][1001];
int s[1001][1001];
int main()

	cin>>n>>m;
	for(int i=0;i<m;i++)//前缀和 
	
		int lx,ly,rx,ry;
		cin>>lx>>ly>>rx>>ry;
		v[lx-1][ly-1]+=1;
		v[rx][ly-1]-=1;
		v[lx-1][ry]-=1; 
		v[rx][ry]+=1;
	
	for(int i=0;i<n;i++)
	
		for(int j=0;j<n;j++)
		
			if(!i&&!j) s[i][j]=v[i][j];
			else if(!i) s[i][j]=s[i][j-1]+v[i][j];
			else if(!j) s[i][j]=s[i-1][j]+v[i][j];
			else s[i][j]=s[i-1][j]+s[i][j-1]-s[i-1][j-1]+v[i][j];
		 
	
	for(int i=0;i<n;i++)
	
		for(int j=0;j<n;j++)
		
			cout<<s[i][j]<<" ";
		
		cout<<endl;
	
	return 0;
 

上面是二维前缀和

下面是一维前缀和

#include<iostream>
#include<algorithm>
using namespace std;//一维差分算法 
int n,m;
int v[1000][1000];
int ans[1000][1000];
int main()

	cin>>n>>m;
	for(int i=0;i<m;i++)
	
		int lx,ly,rx,ry;
		cin>>lx>>ly>>rx>>ry;
		for(int j=ly-1;j<ry;j++)
		
			v[lx-1][j]+=1;
			v[rx][j]-=1;
		

	
	for(int i=0;i<n;i++)
	
		int tem=0;
		for(int j=0;j<n;j++)
		
			tem+=v[j][i];
			ans[j][i]=tem;
		
	
	for(int i=0;i<n;i++)
	
		for(int j=0;j<n;j++)
		
			cout<<ans[i][j]<<" ";
		
		cout<<endl;
	
	return 0;

以上是关于地毯(动态规划以及差分数组)的主要内容,如果未能解决你的问题,请参考以下文章

地毯(动态规划以及差分数组)

洛谷3397地毯

动态规划蒙特卡洛时序差分是三种解决有限马尔科夫决策的有效方法

强化学习读书手札:动态规划(DP)&蒙特卡洛(MC)&时序差分(TD)区别

动态规划:空间优化技巧以及接龙型动态规划

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