惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

aimingoo的专栏
aimingoo的专栏
V
V2EX
G
Google Developers Blog
F
Full Disclosure
Martin Fowler
Martin Fowler
宝玉的分享
宝玉的分享
H
Hacker News: Front Page
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
NISL@THU
NISL@THU
G
GRAHAM CLULEY
V
Vulnerabilities – Threatpost
Hacker News - Newest:
Hacker News - Newest: "LLM"
A
About on SuperTechFans
The Cloudflare Blog
C
Cisco Blogs
D
DataBreaches.Net
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
Vercel News
Vercel News
P
Privacy International News Feed
Microsoft Security Blog
Microsoft Security Blog
Help Net Security
Help Net Security
Recorded Future
Recorded Future
PCI Perspectives
PCI Perspectives
S
Schneier on Security
AI
AI
N
News | PayPal Newsroom
雷峰网
雷峰网
C
Cyber Attacks, Cyber Crime and Cyber Security
P
Proofpoint News Feed
The Last Watchdog
The Last Watchdog
L
LINUX DO - 最新话题
Hugging Face - Blog
Hugging Face - Blog
Apple Machine Learning Research
Apple Machine Learning Research
Schneier on Security
Schneier on Security
S
Securelist
云风的 BLOG
云风的 BLOG
Stack Overflow Blog
Stack Overflow Blog
博客园_首页
AWS News Blog
AWS News Blog
TaoSecurity Blog
TaoSecurity Blog
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
Recent Commits to openclaw:main
Recent Commits to openclaw:main
博客园 - 三生石上(FineUI控件)
C
CXSECURITY Database RSS Feed - CXSecurity.com
K
KPMG report finds enterprise disconnect between AI and its ROI | CIO
Cloudbric
Cloudbric
C
Cybersecurity and Infrastructure Security Agency CISA
Project Zero
Project Zero
C
Check Point Blog
S
Security Affairs

博客园 - 老博客哈

[深入浅出系列]System.Environment HDU第11版解题报告(农夫版) 第(前)k大数问题 SRM 144-149 C#与Matlab混合编程的几种方式 Ajax开发框架(下)[整理] Ajax开发框架(中)[整理] Ajax开发框架(上)[整理] 语义网在线课程 Tidy - 一个把HTML 转成XHTML的工具库[整理] 2008企业级Web产品Top 10 (来源于ReadWriteWeb) (小规模)b牌棋盘完美覆盖数【整理】 稳定婚姻问题(Stable Marriage Problem) 2007 South Central USA Regional Programming Contest 解题报告 《C#完全手册》中提到的一些内部工具及编译选项 TC 泛黄了 Introduction to String Searching Algorithms--Rabin-Karp and Knuth-Morris-Pratt Algorithms [翻译] TopCoder C# User List TCHS SRM 1
一类棋盘互不攻击问题
老博客哈 · 2008-10-08 · via 博客园 - 老博客哈

一类棋盘互不攻击问题

2008-10-08 21:03  老博客哈  阅读(2910)  评论()    收藏  举报

一类棋盘互不攻击问题

                                 农夫三拳@seu(drizzlecrj@gmail.com)

     最近在SGU上做了一些棋盘上互不攻击的题目,稍稍的总结一下:

1. SGU 220 Little Bishops  以及 SGU 221 Big Bishops

问题:  求n*n的棋盘上放置k个互不攻击的象的个数。

解法:  将棋盘旋转45度之后,转换成二维动态规划求解。具体参见 黑书243~244页

转移的方程为 F(i,j) = F(i - 1, j) + F(i - 1, j - 1) * (Ri - j + 1)

其中F(i,j)表示前i行放置j个象的总数,Ri表示第i行的格子总数。那么显然F(i - 1, j)就是第i行不放任何象,F(i - 1, j - 1) * (Ri - j + 1)表示第i行放置1个象的情况。

2. SGU 222 Little Rooks

问题:  求n*n的棋盘上放置k个互不攻击的车的个数。

解法:  组合公式,挑选k个行C(n,k),挑选k个列的排列A(n,k),所以总数为C(n,k)*A(n,k)

3. SGU 223 Little Kings

问题:  求n*n的棋盘上放置k个互不攻击的王的个数。

解法:  状态压缩动态规划。dfs预处理两行之间的转移状态。

方程为:  F(i, j2, k) = Sigma{F(i - 1, j1, k - ONE(j2))}

F(i,j2,k)表示第i行状态为j,前i行放置k个王的总数, F(i - 1, j1, k - ONE(j2)) 为第i - 1行状态为j1(且j1和j2可以转移),前i - 1行放置 k - ONE(j2)个王的总数。

显然ONE(j2)为第i行放置的王的个数。

4.  SGU 224 Little Queens

问题:  求n*n的棋盘上放置k个互不攻击的后的个数。

解法: 参加我的这篇文章 《K皇后问题

5.  SGU 225 Little Knights

问题:  求n*n的棋盘上放置k个互不攻击的马的个数。

解法: 我的解法还做得不好,用的是和3中提到的相同的方法,不过时间复杂度太高了,貌似只能打表交。

我是用F(i,j2,j1,k)表示第i行状态为j2,第i-1行状态为j1,前i行放置k个马的总数,那么有

F(i,j2,j1,k) = Sigma{F(i-1,j1,j0,k - One(j2))} j0和j1能够转移到j2

不知道有没有更好的解法,希望过路大牛指教下。

小结:

对于在棋盘上放置棋子互不攻击的问题,如果问最值问题,例如:n*n的棋盘上最多能够放多少个互不攻击得象等等,问题通常可以转换为二分图模型来求解。

而对于更加通用的n*n棋盘上放置k个互不攻击的棋子的问题,我知道的做法有两种,一种是用容斥原理,另外一种就是状态压缩。其中后者更加通用一些。

欢迎指教!