求01矩阵中均为1的子矩阵个数
写法一:
1.预处理出矩阵中每个1到左边第一个0或者边界会经过几个1。
2.遍历01矩阵,枚举每个1作为子矩阵右下角元素时对答案的贡献。
3.对于01矩阵中的某个1,我们向上枚举行,计算出不同行数的子矩阵的数量累加到答案上。
例题:P1950 长方形
注意!使用以下写法会有两个点TLE!
#include<bits/stdc++.h>
using namespace std;
const int N=1e3+10;
int n,m;
int a[N][N];
int f[N][N];
int main()
{
cin>>n>>m;
for(int i=1;i<=n;++i)
for(int j=1;j<=m;++j)
{
char now;
cin>>now;
if(now=='.')a[i][j]=1;
}
for(int i=1;i<=n;++i)
for(int j=1;j<