吃奶酪
这题因为是个普及-的题目,所以我们可以直接用dfs搞一下。
不过这题还可以用状压dp(二进制枚举),其实和dfs的本质是一样的啦
f[x][s]表示以x为起点,现在的状态是s的最短路径。
转移方程:
f[i][s]=min(f[i][s],double(f[j][s-(1<<(i-1))]+dis(x[i],y[i],x[j],y[j])));
注意这里的二进制运算:
1.造一个只有第i位是1的数(10000):1<<(i-1) 、
(这里可以用来判断第i位是不是1,置1)
PS:将x的第i位置0 x&(~1<<(i-1))
2.取第k位:(n>>k)&1 取后0-k-1位:n&((1<<k)-1)
玉米田
这题可以从每一行作为一个单位出发考虑。
先用0,1表示每一行的合法状态。然后逐行考虑。枚举上下2行的不同状态,因为上下2行不能有重合,所以这里判断一下:
注意:f[i][j]表示前i行状态是j有几种不同取法。所以是一个累加关系。