题解

175 条题解

  • 0
    @ 2006-08-19 08:55:58

    题主整人啊,4重for就AC了

    强烈BS这种行为

  • 0
    @ 2006-08-18 09:13:21

    数据格式BT BT `\`\``

    有的行尾有空格

    有的没有

    #\(%@#&^%\)^@#

  • 0
    @ 2006-08-18 08:50:31

    练练dp用,就是数据忒弱了

  • 0
    @ 2006-08-17 23:21:06

    原来如此!!

    简单的搜索题...

  • 0
    @ 2006-08-17 22:36:28

    别看题目里说的数据范围!!!

    其实m,n都没有超过10!!

    大家随便做吧,硬搜都不要时间……

    比如说我这个吧,4重for循环的硬搜算法,居然0ms过了

    编译通过...

    ├ 测试数据 01:答案正确... 0ms

    ├ 测试数据 02:答案正确... 0ms

    ├ 测试数据 03:答案正确... 0ms

    ├ 测试数据 04:答案正确... 0ms

    ├ 测试数据 05:答案正确... 0ms

    ---|---|---|---|---|---|---|---|-

    Accepted 有效得分:100 有效耗时:0ms

  • -1
    @ 2017-11-03 10:46:28

    只需要找到#再搜索就行
    #include<cmath>
    #include<cstring>
    #include<cstdio>
    #include<cstdlib>
    #include<iostream>
    using namespace std;
    int n,m,maxn,ans;
    char s[10008][10008];
    void dfs(int x,int y)
    {
    maxn=0;
    for(int i=x;i<x+m;i++)
    for(int j=y;j<y+m;j++)
    if(s[i][j]=='#')
    maxn++;
    ans=max(ans,maxn);
    }
    int main()
    {
    cin>>n>>m;
    for(int i=1;i<=n;i++)
    for(int j=1;j<=n;j++)
    cin>>s[i][j];
    for(int i=1;i<=n;i++)
    for(int j=1;j<=n;j++)
    {
    if(s[i][j]=='#')
    dfs(i,j);
    }
    cout<<ans;
    return 0;
    }

  • -1
    @ 2017-09-17 20:40:27

    非常简单!!!!
    #include<iostream>
    using namespace std;
    char a[10000][10000];
    int bc,gc,sum=0;
    int main()
    {
    cin>>bc>>gc;
    for(int i=1;i<=bc;++i)
    for(int x=1;x<=bc;++x)
    cin>>a[i][x];
    for(int i=1;i<=bc;++i)
    for(int x=1;x<=bc;++x)
    {
    int tot=0;
    for(int q=i;q<=i+gc-1;++q)
    for(int p=x;p<=x+gc-1;++p)
    if(a[q][p]=='#')
    tot++;
    sum=max(sum,tot);
    }
    cout<<sum;
    return 0;
    }

  • -1
    @ 2017-09-17 19:44:45
    #include<iostream>
    #include<cstdio>
    #include<cstdlib>
    #include<algorithm>
    #include<cmath>
    #define maxn 10000+5
    
    using namespace std;
    
    int m,n,an=0,ans=0,max1=0,co;
    char ma[maxn][maxn];
    
    int find(int x,int y,int s){
        ans=0;
        for(int i=x;i<=x+s-1;i++)
            for(int j=y;j<=y+s-1;j++){
                if(ma[i][j]=='#'){
                    ans++;
                }
            }
        return ans;
    }
    
    int main(){
        cin>>m;cin>>n;
        for(int i=1;i<=m;i++)
            for(int j=1;j<=m;j++){
                cin>>ma[i][j];
            }
        for(int i=1;i<=m-n+1;i++)
            for(int j=1;j<=m-n+1;j++){
                find(i,j,n);
                if(max1<ans) max1=ans;
    //          cout<<" "<<i<<" "<<j<<" "<<ans<<endl;
            }   
        cout<<max1<<endl;
        return 0;
    }
    
  • -1
    @ 2017-09-17 19:44:10

    #include<iostream>
    #include<cstdio>
    #include<cstdlib>
    #include<algorithm>
    #include<cmath>
    #define maxn 10000+5

    using namespace std;

    int m,n,an=0,ans=0,max1=0,co;
    char ma[maxn][maxn];

    int find(int x,int y,int s){
    ans=0;
    for(int i=x;i<=x+s-1;i++)
    for(int j=y;j<=y+s-1;j++){
    if(ma[i][j]=='#'){
    ans++;
    }
    }
    return ans;
    }

    int main(){
    cin>>m;cin>>n;
    for(int i=1;i<=m;i++)
    for(int j=1;j<=m;j++){
    cin>>ma[i][j];
    }
    for(int i=1;i<=m-n+1;i++)
    for(int j=1;j<=m-n+1;j++){
    find(i,j,n);
    if(max1<ans) max1=ans;
    // cout<<" "<<i<<" "<<j<<" "<<ans<<endl;
    }

    cout<<max1<<endl;
    return 0;
    }

  • -1
    @ 2017-09-17 19:36:35

    #include<iostream>
    #include<cstdio>
    #include<cstring>

    using namespace std;
    int main()
    {
    int m,n,i,max=0,o,p,i1,o1;
    cin>>m>>n;
    char jd[m+1][m+1];
    int s[m-n+2][m-n+2];
    memset(s,0,sizeof(s));
    for(i=1;i<=m;i++)
    for(o=1;o<=m;o++)
    cin>>jd[i][o];
    for(i=1;i<=m-n+1;i++)
    for(o=1;o<=m-n+1;o++)
    {i1=i;o1=o;
    while(i1<=i+n-1)
    {if(jd[i1][o1]=='#')s[i][o]+=1;
    o1+=1;
    if(o1==n+o){i1++;o1=o;}
    }
    if(s[i][o]>max){
    max=s[i][o];}}
    cout<<max;

    }

  • -1
    @ 2017-05-08 12:42:03

    这不是随便乱写的题目吗。。
    枚举无需搜索剪枝

    #include <iostream>
    #include <cstdio>
    #include <algorithm>
    #include <cstring>
    #include <iomanip>
    #include <cstdlib>
    using namespace std;
    
    char a[10005][10005];
    int n,m;
    
    int main()
    {
        int ans=0;
        cin>>n>>m;
        for(int i=1;i<=n;i++)
        {
            for(int j=1;j<=n;j++)
                cin>>a[i][j];
        }
        for(int i=1;i<=n-m+1;i++)
            for(int j=1;j<=n-m+1;j++)
            {
                int tot=0;
                for(int q=i;q<=i+m-1;q++)
                    for(int p=j;p<=j+m-1;p++)
                        if(a[q][p]=='#')
                            tot++;
                ans=max(ans,tot);
            }
        cout<<ans<<endl;
        return 0;
    }
         
    
  • -1
    @ 2017-04-04 18:39:36

    #include <iostream>
    #include <cstring>
    #define inf 10000
    using namespace std;
    int a[inf][inf];
    string s[inf];
    int tot =0;
    int main()
    {
    int m,n;
    cin>>m>>n;
    int i,j,p,q;
    for(i=0;i<m;++i)
    cin>>s[i];
    for(i=0;i<m;++i)
    for(j=0;j<m;++j)
    if(s[i][j]=='#')
    a[i][j] = 1;
    int sum = 0;
    for(i=0;i+n<=m;++i)
    for(j=0;j+n<=m;++j)
    {
    sum = 0;
    for(p=i;p<i+n;++p)
    for(q=j;q<j+n;++q)
    if(a[p][q])
    sum++;
    if(sum>tot)
    tot = sum;
    }
    cout<<tot<<endl;
    }

  • -1
    @ 2017-02-07 08:37:00
    #include<iostream>
    #include<cstdio>
    #include<cstdlib>
    #include<cmath>
    #include<cstring>
    #include<algorithm>
    using namespace std;
    char c;
    int m,n,ans,k;
    int a[11][11];
    inline int sss(int i,int j)
    {
        int b=a[i][j];
        if(i>=n)b-=a[i-n][j];
        if(j>=n)b-=a[i][j-n];
        if(j>=n&&i>=n)b+=a[i-n][j-n];
        return b;
    }
    int main()
    {
        scanf("%d%d",&m,&n);
        for(int i=1;i<=m;i++)
            for(int j=1;j<=m;j++)
            {
                a[i][j]+=(a[i-1][j]+a[i][j-1]-a[i-1][j-1]);
                cin>>c;
                if(c=='#')a[i][j]++;
            }
        if(n>=m)
        {
            printf("%d",a[m][m]);
            return 0;
        }
        for(int i=n;i<=m;i++)
            for(int j=n;j<=m;j++)
            {
                ans=max(ans,sss(i,j));
                if(ans==n*n)break;
            }
        printf("%d",ans);
        return 0;
    }
    
    • @ 2017-02-07 08:40:25

      开一个(11,11)的数组就行了,数据范围没有题目中说的这么大,,,,,,,
      用前缀和预处理一下,复杂度就降到n^2了,,,,,
      其实直接n^4暴力也是可以轻松过的,,,,,

  • -1
    @ 2016-11-03 15:39:31

    数据范围不是10000,而是8,即m,n<=8

  • -1
    @ 2016-10-30 22:53:33

    #include<iostream>
    #include<cstdio>
    #include<cstring>
    #define N 10001
    using namespace std;
    char a[N][N];
    int tot,n,m,maxn;

    int search(int i,int j)
    {
    tot = 0;
    for(int ai=0;ai<n;ai++)
    for(int aj=0;aj<n;aj++)
    {
    if(a[i+ai][j+aj]=='#')
    tot++;
    maxn=maxn>tot?maxn:tot;

    }
    if(i==j==m)
    {
    return maxn;
    }
    if(j+1<=m&&i<=m)
    search(i,j+1);
    if(i+1<=m&&j<=m)
    search(i+1,j);
    }
    int main()
    {
    cin>>m>>n;
    memset(a,'.',sizeof(a));
    for(int i=1;i<=m;i++)
    for(int j=1;j<=m;j++)
    {
    cin>>a[i][j];
    }
    maxn = 0;

    for(int i=1;i<=m;i++)
    for(int j=1;j<=m;j++)
    {

    search(1,1);
    }

    printf("%d\n",maxn);
    return 0;
    }

信息

ID
1199
难度
4
分类
搜索 | 搜索与剪枝 点击显示
标签
递交数
2725
已通过
1238
通过率
45%
被复制
7
上传者