标签:动态规划 acm codeforces
#include <iostream>
#include <cstdio>
#define N 41
using namespace std;
int row[N][N],a[N][N],dp[N][N][N][N];
int main()
{
int n,m,q;
scanf("%d%d%d",&n,&m,&q);
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
{
scanf("%1d",&a[i][j]);
row[i][j]=row[i][j-1];//换行时,row[i][j]自动置为0;
if(a[i][j]) row[i][j]=0;//遇到1,则置为0
else row[i][j]++;
}
for(int a=1;a<=n;a++)
for(int b=1;b<=m;b++)
for(int c=a;c<=n;c++)
for(int d=b;d<=m;d++)
{
dp[a][b][c][d]=dp[a][b][c][d-1]+dp[a][b][c-1][d]-dp[a][b][c-1][d-1];
int r=d-b+1; //计算含有(c,d)这个点的矩形,当然尺寸不能超过该最大宽度
for(int e=c;e>=a;e--)
{
r=min(r,row[e][d]);
dp[a][b][c][d]+=r;
}
}
while(q--)
{
int a,b,c,d;
scanf("%d%d%d%d",&a,&b,&c,&d);
cout<<dp[a][b][c][d]<<endl;
}
return 0;
}
Codeforces 372B. Counting Rectangles is Fun【动态规划,暴力枚举】(lowbit()小用法)
标签:动态规划 acm codeforces
原文地址:http://blog.csdn.net/u013912596/article/details/38796089