Dream__Sky @ 2023-12-02 20:55:54
在有一道题中,
我这么写f[i][j][now^1]=max({f[i][j][now],f[i+len/2][j][now],f[i+len/2][j+len/2][now],f[i+len/4][j][now],f[i+len/2][j+len/4][now],f[i+len/4][j+len/4][now]});过了
但是从中间某个数开始,分成两句取max就错了(中间没问题)。
这是为什么
by gfgoodluck @ 2023-12-02 21:06:49
因为是UB?
by liangbowen @ 2023-12-02 21:16:20
下次请把完整的错误代码放出来。。。。你分开两次取 max,第二次的 max 直接把第一次的覆盖了,显然会寄啊
by Dream__Sky @ 2023-12-02 21:26:03
@liangbowen
while(len*2<m)
{
len*=2;
for(int i=1;i+len-1<=n;i++)
{
for(int j=1;j<=i;j++)
{
f[i][j][now^1]=max({f[i][j][now],f[i+len/2][j][now],f[i+len/2][j+len/2][now]});
f[i][j][now^1]=max({f[i+len/4][j][now],f[i+len/2][j+len/4][now],f[i+len/4][j+len/4][now]});
}
}
now^=1;
}
by liangbowen @ 2023-12-02 21:33:10
你两个代码,对的那个是
ans=max(a,b);
ans=max({ans,x,y});
cout<<ans;
错的那个是
ans=max(a,b);
ans=max(x,y);
cout<<ans;
显然不一样啊,建议下次脑子不清醒的时候休息一下(