POJ 2531

来源:互联网 发布:mac的照片在哪里 编辑:程序博客网 时间:2024/04/29 05:06
思路:通过位运算来枚举集合,由于集合的互补性只需要枚举2^(n-1)个集合。

#include<iostream>#include<cstdio>#include<cstring>using namespace std;int map[30][30];int main(){    int N, temp, flow, ans;    //freopen("in.c", "r", stdin);    while(~scanf("%d", &N)){        for(int i = 1;i <= N;i ++){            for(int j = 1;j <= N;j ++)                scanf("%d", &map[i][j]);        }        ans = -1;        for(int i = 1;i <= (1 << N-1);i ++){            flow = 0;            for(int j = 0;j <= 19;j ++){                if(i & (1 << j)){                    for(int k = 0;k <= 20;k ++){                        if(!(i & (1 << k))) flow += map[j+1][k+1];                    }                }            }            ans = max(ans, flow);        }        printf("%d\n", ans);    }}


0 0
原创粉丝点击