POJ_2531_dfs

来源:互联网 发布:怎样才能在淘宝上开店 编辑:程序博客网 时间:2024/06/06 01:12

//============================================================================
// Name        : POJ_2531.cpp
// Author      : tiger
// Version     :
// Copyright   : Your copyright notice
// Description : Hello World in C++, Ansi-style
//============================================================================

#include <iostream>
using namespace std;
int map[21][21];
int n;
int A;
int dfs(int j, int max)
{
 int i, temp;
 temp = 0;
 //假设选这个点对于当前max值的影响
 for (i = 0; i < n; i++)
 {
  if ((1 << i) & A)
  {
   temp -= map[i][j];
  }
  else
  {
   temp += map[i][j];

  }

 }
 int max1 = max, max2 = max;

 //选择这个点
  A |= (1 << j);
  if (j + 1 < n)
   max1 = dfs(j + 1, max+temp);

 //不选这个点
  A &= ~(1 << j);
  if (j + 1 < n)
   max2 = dfs(j + 1, max);


 if (max1 > max)
  max = max1;
 if (max2 > max)
  max = max2;
 return max;

}

int main()
{

 freopen("in", "r", stdin);
 int i, j;
 A = 0;

 scanf("%d", &n);
 for (i = 0; i < n; i++)
  for (j = 0; j < n; j++)
   scanf("%d", &map[i][j]);
 printf("%d/n", dfs(0, 0));

 return 0;
}

原创粉丝点击