摘要:
此题可用位运算优化的搜索算法来做,主要参考M67牛的位运算教程:http://www.matrix67.com/blog/archives/266主要思想是设置3个参数row,ld,rd分别代表纵列,主对角线和副对角线上的禁位情况,此题与n皇后问题稍有不同,是在n*n的棋盘上放置k个,所以需要稍稍修改,详见程序。sgu224Code highlighting produced by Actipro... 阅读全文
摘要:
此题可用状态压缩来做,首先dfs出单独一行所有可能的放置状态,存入数组s(如n=3时s[1]=000,s[2]=100,s[3]=010,s[4]=001,s[5]=101),并设c[t]为s[t]中1的个数。设f[l][t][k]是前l行已放完,第l行状态为s[t]且前l行共放置k个棋子的方法数,则f[l][t][k]=Sum{f[l-1][i][k-c[k]]},其中s[i]和s[t]需满足:... 阅读全文
摘要:
显然当n<k时答案为0当n>=k时,可分为两步:先在n*n的矩阵中选出k行k列,组成一个k*k的子矩阵,再在k*k的子矩阵中放置k个。前一步的方法数为C(n,k)*C(n,k),后一步的方法数为k!,故答案为(C(n,k))^2*k!。Sgu 222Code highlighting produced by Actipro CodeHighlighter (freeware)http:... 阅读全文