关于一种滚动数组的错误实现方式

滚动数组的大坑!!!!!!!


错误写法: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);
	}
}
posted @ 2025-11-17 20:37  Wy_x  阅读(68)  评论(3)    收藏  举报