关于一种滚动数组的错误实现方式
滚动数组的大坑!!!!!!!
错误写法:swap 一次是 \(O(N)\) 的!!!!!!!
int dp[N],dp2[N];
int dodp()
{
memset(dp,-0x3f,sizeof(dp));
memset(dp2,-0x3f,sizeof(dp2));
dp2[0]=0;
for(int kkk=0;kkk<s.size();kkk++)
{
swap(dp,dp2);
memset(dp2,-0x3f,sizeof(dp2[0])*(tot+1));
}
}
正确写法:swap 一次是 \(O(1)+O(tot)\) 的!!!!!!!
int f[N]={},g[N]={},*dp,*dp2;
void dodp()
{
dp=f;dp2=g;
fill(dp,dp+tot+1,-0x3f3f3f3f);
fill(dp2,dp2+tot+1,-0x3f3f3f3f);
dp2[0]=0;
for(int kkk=0;kkk<s.size();kkk++)
{
swap(dp,dp2);
fill(dp2,dp2+(tot+1),-0x3f3f3f3f);
}
}
以下是博客签名,正文无关
本文来自博客园,作者:Wy_x,转载请在文首注明原文链接:https://www.cnblogs.com/Wy-x/p/19234357
版权声明:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议(CC-BY-NC-SA 4.0 协议)进行许可。

浙公网安备 33010602011771号