bit程设 26. Little Bishops uva 861
2014-10-03 15:46
381 查看
一道可能不太好想的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度搜索也可以,直接成了一个菱形棋盘的八皇后问题。
大体思路就是把图形旋转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度搜索也可以,直接成了一个菱形棋盘的八皇后问题。
/*
代码过几天再贴
*/
相关文章推荐
- UVa Problem Solution: 861 - Little Bishops
- Uva-861-Little Bishops
- UVa 861 Little Bishops(棋盘放棋)
- spoj 861 SWAPS & uva 11990 "Dynamic'' Inversion(动态维护逆序对)
- UVA10237:Bishops(dp)
- UVA11261 Bishops
- UVA 10237 - Bishops(递推)
- UVA 10237 Bishops
- UVA - 10237 Bishops
- 递推+思路构造·UVA 11261·Bishops
- (转 回溯法= =) UVa Problem 861 Little Bishops (棋盘上的象)
- uva 10237 - Bishops(dp)
- Uva 861 (little bishop)搜索,棋盘多项式,dp
- uva 861 Little Bishops 棋盘上的象
- Little Bishops(UVa 861)
- uva 861 Little Bishops 组合数学 (布棋)
- UVa10237 Bishops
- uva 10237 Bishops 黑白染色处理
- UVa Problem 861 Little Bishops (棋盘上的象)
- UVa 861 Little Bishops (组合数学)