如何把长三进制字符串数组压缩缩成短三进制数组

  把底边贴着第 x 行底边放置的芯片 称为第 x 行芯片

  由于芯片长度只有 3, 所以第 x 行芯片的放置只受 x-1行 和 x-2 行放置情况的影响

  同时由于一旦 方格 (x-1, y)被黑色记号或其他芯片 占据,则方格(x-2,y)即便空闲对第 x行芯片的放置也毫无意义

  所以,只需记录的状态只有:

  意味着对于 I 层 其状态 J, 保存著  II-1 层 芯片的放置方法,

  所以我们通过 dp(IJ)更新 I+1 层时,同样要更新 I+1 的状态信息 K 其保存着 I+1, I层信息

  状态 dp(i,j)表示 前 i 层 状态为 J 的朂大芯片数量

    情况一 当前列y 不放,从 y+1 列开始考虑

    情况三 当前三列(y,y+1,y+2)合法,放 2*3 芯片 更新 I+1 层状态,再去考虑 y+3列

  叧处理列的组合问题需要 递归DFS,通过回溯来解决 另外,对于黑点我们其实可以合并到 芯片占据的类型中去,

而不需要单独处理这樣就能同过 I层的放置序列 P(p1,p2,...,pm),I+1层的放置序列Q (Q1Q2,。Qm),来决策了

// 当前层可不放任意芯片 //则 竖立放置芯片 3*2, 左下角坐标为 (i+1,x) // 初始化为 -1标明该 状态不可用 // 初始化第一层状态, 抽象把第0层看作皆被占用合法状态仅一种,且方案数为0 // 1:i层为空i-1层已占用 // 初始化下一層nxt,初始时皆为不可用 //I层 放置编号J 解压成 放置序列 P[] //获取 I+1层 放置序列 Q[], 且把第I+1层 损坏位置看做已占用添加到状态中 { //去除掉 I-1层 的信息,存储II+1放置信息 // 获取第I+1行 放置状态以及数量

求几道关于C语言的填空题1. 在计算机中,一个字节所包含二进制位的个数是__________在Tubro C中,短整形数据包括__________个字节整形数据是__________个字节,实数是__________个字节字符是__________个字节。 3.已知ab,c的值均为5;表达式 函数可以有返回值也可以没有如果确定没有返回值,可以在函数头加__________说明是没有返回值的空函数如果没有说明函数類型,则函数返回值的类型是__________ 11. 链表可以__________分配存储空间。 谢谢大家回答

免费查看千万试题教辅资源

我要回帖

更多关于 字符串数组压缩 的文章

 

随机推荐