jdoj 1347 核弹危机

题目描述:传送门

思路:

二维树状数组模板题

#include<cstdio>
#include<cstring>
#include<queue>
#include<cmath>
#include<algorithm>
using namespace std;
int n,m;
int ans;
int a[1010][1010];
void add(int x,int y,int k)
{
    for(int i=x;i<=n;i+=i&-i)    
        for(int j=y;j<=n;j+=j&-j)        
            a[i][j]+=k;     
}   
int getsum(int x,int y)
{
    int sum=0;
    for(int i=x;i;i-=i&-i)
        for(int j=y;j;j-=j&-j)
            sum+=a[i][j];
    return sum;
}
char s[10010];
int main()
{
    scanf("%d%d",&n,&m);
    for(int i=1;i<=n;i++)
    {
        scanf("%s",&s[0]);
        for(int j=0;j<n;j++)
            if(s[j]=='#')
                add(i,j+1,1);
    }
    for(int i=m;i<=n;i++)
        for(int j=m;j<=n;j++)
            ans=max(ans,getsum(i,j)-getsum(i-m,j)-getsum(i,j-m)+getsum(i-m,j-m));
    printf("%d",ans); 
}

 

发表评论

邮箱地址不会被公开。 必填项已用*标注