动态规划-阿里笔试

动态规划-阿里笔试_第1张图片


答案:117.
分析:
状态压缩+动态规划+记忆化搜索
状态压缩:用int型数据保存拼图过程中的图案。二进制表示的倒数第i位表示2*7地面中第i个格子是否被地板铺上与否。
动态规划:dp[r][c][sta]表示在形状sta的基础上,在(r,c)位置开始拼,拼满整个地面的情况种类数目。那么状态转移方程就是:
[java]  view plain copy
  1. if (c + 1 < COLUMN)  
  2.     dp[r][c][sta] += DP(r, c + 1, staTemp);  
  3. else  
  4.     dp[r][c][sta] += DP(r + 10, staTemp);//staTemp表示铺上某块地板后的新图案。  

记忆化搜索:已计算过的不要重复计算,不然开销大到不能承受。
结构体设计:有Point与Shape,后者表示砖的形状。因为每块砖的面积都大于1*1,所以我们可以缺省一个,省点代码量。见下图:
动态规划-阿里笔试_第2张图片

代码:


你可能感兴趣的:(动态规划-阿里笔试)