代码如下,此题为经典状态压缩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;
for (int j=0;j<thr[m];++j)
{
if (f[i-1&1][j]<0) continue;
else dfs(i,j,0,m,0);
}
}