9.28 dp理解分享+dp题目:中国象棋

dp的精华内容是状态转移

状态转移首先的前提是相互影响,由a可以推出b

举一个物理上的例子:

 像一图 木板全都立起来的时候,就算取出任意一片木板,对其他木板完全没有影响,那这样怎么构成dp呢(摸腮)

但像图二 木板是堆叠的,大木板在下面,小木板在上面,很多时候我们需要一片大模板(解决一个大问题),我们需要先把小木板拿起不断往下拿才能得到大木板。而且其实这里使了个小心机,我并没有把相同大小的木板都平放堆叠起来,而是不同大小的。正是因为不同大小,我们才更加容易把木板拿起来。

dp就像这一堆木板,设置状态【前i个xxx怎么怎么样】不正好像二图的木板吗。

好了开始讲中国象棋([AHOI2009]中国象棋 - 洛谷)这一题:

我们要设一个dp_all[i][j][k]表示前i行有j列只有1棋有k列有2棋

 为什么要这么想呢???

因为我们找到了这一题的漏洞点,就是一列or一行只有可能出现0.1.2个棋子

而且每添一行我们可用排列组合的公式算出新的状态。

形式:不断给dp_all[i][j][k]+=dp_all[i-1][j-d][k-dd]*dp_hang[ii][kk](dp_hang表示的是排列组合的公式)

 这样一道dp题最大体的框架就完成了。

当然我在写这道题的时候也出现的若干问题:

1、忘记mod

2、又一列1棋转变为一列2棋,忘记把一列1棋的数量减少(只求改变不求代价qaq)

3、算排列组合公式时直接算了n!忘记优化,直接就re了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值