地毯(动态规划以及差分数组)
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;
以上是关于地毯(动态规划以及差分数组)的主要内容,如果未能解决你的问题,请参考以下文章
动态规划蒙特卡洛时序差分是三种解决有限马尔科夫决策的有效方法