我的思路是:如果有一系列的flip_col() and flip_row()可以产生满足题设的矩阵,则由于相邻的flip_col()和flip_row()可以相互交换而不影响最终结果,可以把这一系列的flip_col() and flip_row()整理为一系列的flip_row()跟着一系列的flip_col()操作。这样前面的flip_row()操作可以将源矩阵转化为2^m个不同矩阵(每一行可以flip或者不flip,共m行),这2^m个矩阵的每列元素如果为负,则需要flip_col,如果为正则不需要进行flip_col。然后检查最终的结果矩阵是不是符合题设,将所有的可行矩阵计算出来后取S最小的那个。时间复杂度是O(2^m*m*n)

。
暂时只想到这么多,ajoo把你的非多项式时间的解法也讲讲看。