bit程设 26. Little Bishops uva 861

一道可能不太好想的dp,

大体思路就是把图形旋转45度,就变成了只攻击水平方向和垂直方向,dp[i][j]表示前 i 行放 j 个不相互攻击的象,c[i]表示第  i 行有多少个位置。

状态方程:dp[i][j]=dp[i-1][j]+dp[i-1][j-1]*(c[i]-j+1);

翻转45度后可以把bishop全部看成车,即只能攻击横竖方向

因为每一行只能放置一个车,所以前i行有j个车可分为如下两种情况

1. j 个车全在前 i - 1 行 ,个数为dp[i - 1][j]

2.第 i 行有一个车,前 i - 1 行放置 j - 1 个车,那么前 i - 1 行在放置 j - 1 个车时已经占用 了第 i 行的 j - 1 个格子,剩余的格子数为

c[i] - (j - 1),一共是dp[i-1][j-1]*(c[i]-j+1)

再补充一下边界条件:

  • dp[i][0] = 1, 0 <= i <= n   
  • dp[0][j] = 0, 1 <= j <= k   

这道题也可以自己本地暴力回溯求出所有的答案,最后打表就好了。  直接搜索可以,每次的判断条件是所在的两条对角线。
旋转45度搜索也可以,直接成了一个菱形棋盘的八皇后问题。
/*
   代码过几天再贴
*/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值