| ||||||||||
| Online Judge | Problem Set | Authors | Online Contests | User | ||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest | |||||||||
Re:好像我写了深搜也没专门剪什么有时0ms有时16ms 。。交流交流。 不懂分析In Reply To:好像我写了深搜也没专门剪什么有时0ms有时16ms 。。交流交流。 不懂分析 Posted by:userfriendly at 2009-02-20 20:08:18 > 状态定义为:第一个棋子放在至少第r行,剩余k个棋子要放, f(r, k) 为可能的放法数
> 那么题目就是求 f(0, k)
>
> f(r, k)= 本行不放的情况 + 本行放1个的情况 乘以 f(r+1, k-1) ,
>
> 因为本行(第r行)放1个的话有多种方法,放哪里影响下一次放的位置,所以必须要记录棋盘状态和回溯。(不满足无后效性唉)
>
> 本行不放的情况=f(r+1, k)+...+f(r+k-n, k)
>
> rm cm分别标记行和列是否可放
>
> 我的dfs如下
> int dfs(int r, int k)
> {
> int ret=0;
> if(k==0) return 1;
> for(int i=r; i<n-k+1; i++)
> for(int j=0; j<n; j++)
> if(cb[i][j]==1 && rm[i]==0 && cm[j]==0) // can place chess
> {
> rm[i]=1; cm[j]=1;
> ret+=dfs(r+1, k-1);
> rm[i]=0; cm[j]=0;
> }
> return ret;
> }
>
> 谁给个复杂度分析 :)
Followed by:
Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator