본문 바로가기

알고리즘/SWEA

4012

static int table[16][16];
static int N;

static int __solution(int s, int sel_bit, int cnt)
{
	if (cnt == N / 2)
	{
		vector<int> grp[2];
		for (int i = 0; i < N; i++)
		{
			if (sel_bit & 1 << i)
				grp[1].push_back(i);
			else
				grp[0].push_back(i);
		}
			
		int val[] = { 0, 0 };
		for (int g = 0; g < 2; g++)
		{
			for (int i = 0; i < cnt; i++)
			{
				int y = grp[g][i];
				for (int j = i + 1; j < cnt; j++)
				{
					int x = grp[g][j];
					val[g] += (table[y][x] + table[x][y]);
				}
			}
		}

		return (val[0] > val[1] ? val[0] - val[1] : val[1] - val[0]);
	}

	int min = 0x7FFFFFFF;
	for (int start = s + 1; start < N; start++)
	{
		int ret = __solution(start, sel_bit | 1 << (start), cnt + 1);
		if (ret < min)
			min = ret;
	}

	return min;
}

...

'알고리즘 > SWEA' 카테고리의 다른 글

7194  (0) 2021.11.03
6808  (0) 2021.11.01
4013  (0) 2021.11.01
7466  (0) 2021.11.01
8191  (0) 2021.11.01