[CQOI2011]放棋子

这篇博客探讨了一道关于放棋子的问题,首先分析了只有一种颜色棋子时的动态规划解决方案,定义了状态f[k][i][j]表示放置k种颜色棋子占据i行j列的方案数。接着引入了考虑多种颜色棋子的情况,通过公式g[k][i][j]来表示前k种颜色棋子全部放置后的方案数,并给出了优化后的代码实现。
摘要由CSDN通过智能技术生成
前言:

博客食用体验更佳。

这道题乍一看就是动规题。显然有多个颜色棋子的情况由于棋子之间会相互影响不好处理,我们先考虑只有一种颜色的情况。

  • s [ k ] s[k] s[k] 表示第 k k k 种颜色棋子的数量。
  • C [ m ] [ n ] C[m][n] C[m][n] 表示 C m n C^n_m Cmn 的值。
  • f [ k ] [ i ] [ j ] f[k][i][j] f[k][i][j] 表示把第 k k k 种颜色的棋子放完占 i i i j j j 列的方案数。
  • i i i j j j 列不一定是要挨在一起的。
  • 我们可以用总的方案数 C m × n k C^k_{m\times n} Cm×nk 减去不合法的方案数,即放了 k k k 种颜色的所有棋子却并没有占到 i i i j j j 列的方案数。
  • 那么不合法的方案数就是: ∑ x = 1 x ≤ i ∑ y = 1 y ≤ j f [ k ] [ x ] [ y ] × C [ i ] [ x ] × C [ j ] [ y ] ( x ≠ i 或 y ≠ j ) \sum \limits^{x\le i}_{x=1}\sum \limits^{y\le j}_{y=1}f[k][x][y]\times C[i][x]\times C[j][y](x\ne i 或 y\ne j) x=
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值