bzoj 2241 打地鼠 模拟

来源:互联网 发布:c盘数据恢复软件 编辑:程序博客网 时间:2024/05/22 11:31

这个题时间复杂度好迷啊,神一样的n^6模拟也能跑!暴力踩标算,n方过百万。

#include<cstdio>#include<iostream>using namespace std;int a[105][105];int b[105][105];int m,n,tot=0;bool del(int i,int j){    for(int i1=1;i1<=m;i1++)    for(int j1=1;j1<=n;j1++)        b[i1][j1]=a[i1][j1];    for(int p1=1;p1<=m;p1++)    for(int p2=1;p2<=n;p2++)    {        if(!b[p1][p2]) continue;        if(p1+i-1>m||p2+j-1>n)            return false;        int t=b[p1][p2];        for(int v1=0;v1<i;v1++)        for(int v2=0;v2<j;v2++)        {            if(b[p1+v1][p2+v2]<t) return false;            b[p1+v1][p2+v2]-=t;        }    }    return true;}int main(){    scanf("%d%d",&m,&n);    for(int i=1;i<=m;i++)    for(int j=1;j<=n;j++)    {        scanf("%d",&a[i][j]);        tot+=a[i][j];    }    int ans=1e9;    for(int i=m;i>=1;i--)    for(int j=n;j>=1;j--)    {        if(tot%(i*j)) continue;        if(del(i,j))        {            ans=min(ans,tot/(i*j));            break;        }    }    printf("%d",ans);    return 0;}
4 0
原创粉丝点击