关于此题初始化的疑惑
查看原帖
关于此题初始化的疑惑
215742
喀拉客楼主2022/10/22 18:10

代码如下,此题为经典状态压缩dp

题意大概就是在一个有障碍点的网格中放置3*2的矩形,求最多可以放多少个

考虑以行号,即以f数组的第一维为阶段,且阶段i只会从阶段i-1推出

照理来说只需在dp过程开始之际将f数组整体初始化为-INF即可

然而楼主亲测必须加上注释标记处的代码,每次循环都把一整行对应的状态重新初始化为-INF才可通过

为何要重新初始化?

求大神帮我解惑

memset(f,-0x3f,sizeof f);
f[0][0]=0;
for (int i=1;i<=n;++i)
{
	for (int j=0;j<thr[m];++j) f[i&1][j]=-0x3f3f3f3f;//明明前面都用memset初始化过了,为什么此处还得初始化
	for (int j=0;j<thr[m];++j)
	{
		if (f[i-1&1][j]<0) continue;
		else dfs(i,j,0,m,0);//利用dfs从阶段i-1推出阶段i
	}
}
2022/10/22 18:10
加载中...