#1648. 置棋问题

置棋问题

题目描述

m×n\red {m\times n}的主格中任意指定x\red {x}个格子构成一个棋盘,在任一个构成的棋盘上放置k\red {k}个棋子,要求任意两个棋子不得位于同一行或同一列上,要求输出满足条件的所有方案。(注意棋盘是稀疏的,即x<m×n/2,1<m,n<10\red {x<m\times n/2,1<m,n<10}

1、对给定棋盘,求出该棋盘可放置的最多的棋子数p\red {p}

2、记di \red {d_i~}为该盘上放置I\red {I}个棋子时的方案总数(1<=i<=p)\red {(1<=i<=p)},其中经旋转和镜面反射而得的方案记为不同的方案,对于每一个i\red {i},求出相应的di \red {d _i~}

3、程序应能够连续处理多个棋盘,对每一个棋盘,输出p\red {p}d1,d2,dp\red {d_1,d_2,…d_p},,只需输出数字,不必输出具体的方案。

输入格式

第一行是两个数字,代表第一个棋盘的m\red {m}n\red {n},以下为一个仅由0\red {0}1\red {1}组成的m×n\red {m\times n}矩阵,某一个位置为1\red {1}表示相应的格子在这个棋盘,为0\red {0}表示相应的格子不在棋盘上。

输出格式

第一行为棋盘可放置的最多的棋子数p\red {p};第二行分别列出从放1\red {1}个棋子数到放p\red {p}个棋子的方案总数。

样例

输入样例

5 5

0 1 1 1 0

0 1 0 0 0

1 1 1 0 0

0 0 1 0 0

0 0 1 1 0

输出样例

The maxnumber=4

1:10

2:28

3:24

4:5