题解

273 条题解

  • 0
    @ 2006-10-04 21:36:53

    我O(n^5)的搜索过了……

    纪念ac……

    编译通过...

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

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

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

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

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

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

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

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

    ├ 测试数据 09:答案正确... 56ms

    ├ 测试数据 10:答案正确... 525ms

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

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

  • 0
    @ 2006-10-04 14:43:48

    ├ 测试数据 03:运行超时...

    ├ 测试数据 04:运行超时...

    ├ 测试数据 05:运行超时...

    ├ 测试数据 06:运行超时...

    ├ 测试数据 07:运行超时...

    ├ 测试数据 08:运行超时...

    ├ 测试数据 09:运行超时...

    ├ 测试数据 10:运行超时...

  • 0
    @ 2006-09-28 21:34:53

    四个FOR 类似于1199

  • 0
    @ 2006-09-06 16:24:12

    呃...

    四个循环就过了

  • 0
    @ 2006-08-31 10:34:07

    貌似类似TJU上的那道“尚未继承的遗产”

  • 0
    @ 2006-08-22 18:26:27

    这个预处理让我想到了usaco某次月赛的twalk。。。只不过这题用不到。。。

  • 0
    @ 2006-08-08 22:12:51

    嘻嘻,USACO上的老题了.

    O(N^2)的算法才是正道.

  • 0
    @ 2006-07-25 11:08:49

    这道题目数据不大,才1000,用不着DP。我是4重FOR,搜索过了!

  • 0
    @ 2006-02-21 09:27:40

    怎么你们都是DP 我可是搜过去的

  • 0
    @ 2006-02-05 19:21:04

    回楼下:

    那个预处理嘛

    s=左上角1,1 到 右下角i,j 的石头和

    那么s=s+s-s+a

    {a表示i,j处是否有石子}

    那么从a,b 到 c,d 的石头和就是:

    s[c,d]-s[a-1,d]-s[c,b-1]+s[a-1,b-1]

    大致这样……有可能笔误

  • 0
    @ 2006-03-17 19:22:03

    很经典的DP

    重点在于想得清楚就好

    另:某同学说可以搜过..

    至于加速——有一种方法可以用O(n^2)预处理在O(1)时间里得到一个任意矩形内的石头和........

    怀疑ing 至少我从来DP 没搜索成功过 尽管用到了那个鸟方法

    ps.我知道那个预处理的方法...经常用的...

  • 0
    @ 2006-01-22 16:10:00

    极其弱智的dp。

    设b表示以(i,j)为右上角的最大正方形的边长,则有:

    b:=min(b,b,b)+1;

    这样程序就很简单了。

    (p.s:事实上我从做源程序到所有数据完成一共才用了5分钟^_^)

  • -1
    @ 2016-08-21 14:17:34

    超弱智的简单方法AC,勿喷谢谢。
    #include<bits/stdc++.h>
    using namespace std;
    int _map[1001][1001]={0};
    int main()
    {
    int n,m,i,j,k,maxx,i1,j1;
    bool f;
    cin>>n>>m;//n是行,m是列
    for(i=1;i<=n;i++)
    for(j=1;j<=m;j++)
    cin>>_map[i][j];
    maxx=0;
    for(i=1;i<=n;i++)
    for(j=1;j<=m;j++)
    if(_map[i][j])
    {
    for(k=i;k<=n;k++)
    {
    f=true;
    for(i1=i;i1<=k;i1++)
    for(j1=j;j1<=j+k-i;j1++)
    if(!_map[i1][j1])
    {
    f=false;
    break;
    }
    if(f) maxx=max(maxx,k-i+1);
    }
    }
    cout<<maxx<<endl;
    return 0;
    }

信息

ID
1057
难度
4
分类
动态规划 点击显示
标签
(无)
递交数
6668
已通过
3074
通过率
46%
被复制
8
上传者