Aoj 0525 Osenbei

这道题在挑战程序设计竞赛上面被分为穷竭搜索,思路是,先看数据规模,先对行进行DFS,然后枚举每一列,即可。

#include <cstdio>
int m, n, matrix[20][10010], res;
void DFS(int index)
{
    if(index == m){
        int total = 0;
        for(int i = 0; i < n; i++){
        	int temp = 0;
            for(int j = 0; j < m; j++){
                if(matrix[j][i]) temp++;
            }
            if(temp <= m / 2) temp = m - temp;
            total += temp;
        }
        if(total > res) res = total;
        return;
    }
    DFS(index + 1);
    for(int i = 0; i < n; i++){
        if(matrix[index][i]) matrix[index][i]--;
        else matrix[index][i]++;
    }
    DFS(index + 1);
}
int main()
{
    while(scanf("%d%d", &m, &n) != EOF){
        if(!m && !n) break;
        res = 0;
        for(int i = 0; i < m; i++){
            for(int j = 0; j < n; j++){
                scanf("%d", &matrix[i][j]);
                if(matrix[i][j]) res++;
            }
        }
        DFS(0);
        printf("%d\n", res);
    }
    return 0;
}
发布了29 篇原创文章 · 获赞 0 · 访问量 371

猜你喜欢

转载自blog.csdn.net/qq_33942309/article/details/105543374
今日推荐