9月21日

      我主要看动态规划,这几天看的是状态压缩部分,首先状态压缩适合用的题目是,具有DP问题的特性,但是状态中所包含的信息过多,如果要用数组来保存状态的话需要四维以上的数组。于是,我们就需要通过状态压缩来保存状态,而使用状态压缩来保存状态的DP就叫做状态压缩DP。状态压缩一般运用进制压缩,很多题目都用到二进制压缩,这个时候就要用到二进制运算符了,可以节省大量的时间,运算符要按照实际使用。首先看的是Mondriaan's Dream这道题,这道题给你n*m(1<=n,m<=11)的方格矩阵,要求用1*2的多米诺骨牌去填充,问有多少种填充方法。这道题状态转移不是很好想,其中一行的状态我们用一个二进制表示,0表示没有被覆盖,1表示被覆盖了 最后得到一个01串,这个串变回十进制就是一个状态,从第 i行放一个小木块后,可能会对下一行造成影响,但最多只会影响到下一层。  dp[i][j]代表第当1到i-1行铺满后,第i行为状态j的种数。状态j为每一行的二进制压缩1代表存在了木块,0代表不存在。在第i行遍历所有的j,对每一个状态进行dfs,找到可以填满的一种情况,得到下一行的状态。然后看了hdu3001Travelling 这道题,这个题不能用二进制转移而是要用三进制转移。dp[S][j]中S表示当前已经访问过的节点集合是S,当前所在顶点为j,dp[S][j]就表示从j出发访问剩余的所有节点的最小花费。另外起点任意,所以dp[bit[i]][i]=0,剩下的初始化为INF。状态转移方程为dp[j+st[k]][k] = min(dp[j+st[k]][k],dp[j][i]+G[k][i])而且要预处理进制数组。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值