80分的看过来

P1736 创意吃鱼法

陌尘缘_怜 @ 2018-10-29 17:03:45

感谢@Chen_Py大佬的数据

4 4
1 0 1 0
0 1 0 0
1 0 1 0
0 0 0 1

输出为3

dp在转移时,若是失败,不应直接跳过,应接着枚举可行长度

for(int i=1;i<=n;i++)//错误代码
    {
        for(int j=m;j>=1;j--)
        {
            if(dp2[i][j] and i+1<=n and j-1>=1 and a[i+1][j-1])
            {
                int l=dp2[i][j];
                int re1=f[i][j-1]-f[i][j-2]-f[i-l][j-1]+f[i-l][j-2];
                int re2=f[i+1][j+l-1]-f[i+1][j-1]-f[i][j+l-1]+f[i][j-1];
                if(!re1 and !re2) dp2[i+1][j-1]=l+1,maxn=max(maxn,l+1);
            }
        }
    }
for(int i=1;i<=n;i++)//正确代码
    {
        for(int j=m;j>=1;j--)
        {
            if(dp2[i][j] and i+1<=n and j-1>=1 and a[i+1][j-1])
            {
                for(int l=dp2[i][j];l>=1;l--)
                {
                    int re1=f[i][j-1]-f[i][j-2]-f[i-l][j-1]+f[i-l][j-2];
                    int re2=f[i+1][j+l-1]-f[i+1][j-1]-f[i][j+l-1]+f[i][j-1];
                    if(!re1 and !re2) 
                    {
                        dp2[i+1][j-1]=l+1,maxn=max(maxn,l+1);
                        break;
                    }
                }
            }
        }
    }

不用问我为什么要告诉你们这些

我只是希望大家可以在讨论中互助一下,

(一份代码卡1个小时真的很烦)


by sdxjzsq @ 2018-10-29 19:28:48

@陌尘缘_怜 让我少浪费了1个小时的时间!
数据好评!


by 谁是鸽王 @ 2018-11-04 15:52:43

非常nice,感谢lz,我做法和你一样,但是我想问一下,这样不就是O(n^3)的吗,是真做法吗


by shuyingte @ 2018-11-09 07:28:54

太神了


by Thaumaturge @ 2019-04-18 15:44:46

@谁是鸽王 他是从答案开始循环的,如果答案特别大才会被卡住


by lytqwq @ 2019-07-20 10:35:07

感谢


by wfffwwwww @ 2019-08-10 18:39:58

感谢大佬


by lemir3 @ 2019-08-27 21:26:01

然而过了大佬的这个hack数据依旧WA#4和#12...


by NickCX @ 2019-10-25 18:59:53

orz%%%,感谢大佬


by youlv @ 2023-10-18 13:29:46

感谢


by zhanglh @ 2024-07-03 21:40:46

万分感谢!!


|