bzoj2241: [SDOI2011]打地鼠

来源:互联网 发布:淘宝pos机 编辑:程序博客网 时间:2024/05/18 02:38

这题的话,先是暴力很容易想到
然后加点判断,可以使复杂度小很多
然后本来还想加个二维树状数组的优化的。。
但由于数据水就没有这个必要了

#include<cstdio>#include<cstring>const int MAX=1<<30;const int N=105;int a[N][N];int A[N][N];int n,m;int sum=0;int ans=MAX;bool check (int x,int y)//锤子有多大 {    for (int u=1;u<=n;u++)        for (int i=1;i<=m;i++)            a[u][i]=A[u][i];    for (int u=1;u<=n;u++)    {        for (int i=1;i<=m;i++)        {            int lalal=a[u][i];            if (lalal<0) return false;            if (lalal==0) continue;            for (int xx=0;xx<x;xx++)                for (int yy=0;yy<y;yy++)                    a[u+xx][i+yy]-=lalal;        }    }    return true;}int main(){    scanf("%d%d",&n,&m);    for (int u=1;u<=n;u++)        for (int i=1;i<=m;i++)        {            scanf("%d",&A[u][i]);            sum=sum+A[u][i];        }    for (int u=1;u<=n;u++)        for (int i=1;i<=m;i++)        {            if (sum%(u*i)==0&&sum/(u*i)<ans&&check(u,i))                ans=sum/(u*i);        }    printf("%d\n",ans);    return 0;}
原创粉丝点击