POJ2531--子网流量问题

#include <iostream>
using namespace std;

#define SIZE 20
int data[SIZE + 1][SIZE + 1];

int subnet[2][SIZE];

int maxTraffic = 0;

int getTraffic(int node, int netNumber, int size){
    int ret = 0;
    for(int i = 0; i < size; i++){
        if(subnet[netNumber][i]){
            ret += data[node][i];
        }
    }
    return ret;
}

void getMax(int curStep, int targetStep,int curTraffic, int startPos, int size){
    if(curStep == targetStep) return;
    
    for(int i = startPos; i < size; i++){
        subnet[0][i] = 0;
        subnet[1][i] = 1;

        int trfficWithSubnet1 = getTraffic(i, 1, size);
        int trfficWithSubnet0 = getTraffic(i, 0, size);

        int tmp = curTraffic;
        curTraffic = curTraffic - trfficWithSubnet1 + trfficWithSubnet0;
        if(curTraffic > maxTraffic) maxTraffic = curTraffic;

        getMax(curStep + 1, targetStep, curTraffic, i + 1, size);

        subnet[0][i] = 1;
        subnet[1][i] = 0;
        curTraffic = tmp;
    }

}

int main(){
    //freopen("input.txt", "r", stdin);
    int N;
    cin >> N;

    for(int i = 0; i < N; i++){
        for(int j = 0; j < N; j++){
            cin >> data[i][j];
        }
    }

    for(int i = 0; i < N; i++){
        subnet[0][i] = 1;
        subnet[1][i] = 0;
    }
    maxTraffic = 0;
    getMax(0, N/2, 0, 0, N);
    cout << maxTraffic << endl;

}

 

posted @ 2016-12-08 14:55  Pumpkin0227  阅读(167)  评论(0编辑  收藏  举报