C++/백준 C++

C++ 10819 차이를 최대로 [백트래킹, 브루트포스] -> 필수 공부

CE : 하랑 2024. 10. 23. 18:42

 

 

 

 

코드

#include <iostream>
#include <vector>

struct FValue
{
public:
	int Value = 0;
	bool Visited = false;
};

void DFS(std::vector<FValue>& _ValueCheck, std::vector<int>& _CalValue,int _index, int& _result)
{
	if (_index == _ValueCheck.size())
	{
		int Sum = 0;

		for (int i = 0; i < _ValueCheck.size() - 1; i++)
		{
			Sum += abs(_CalValue[i] - _CalValue[i + 1]);
		}

		_result = std::max(Sum, _result);
		return;
	}

	for (int i = 0; i < _ValueCheck.size(); i++)
	{
		if(false==_ValueCheck[i].Visited)
		{
			_ValueCheck[i].Visited = true;
			_CalValue[_index] = _ValueCheck[i].Value;
			DFS(_ValueCheck, _CalValue, _index+1, _result);
			_ValueCheck[i].Visited = false;
		}
	}

}

int main()
{
	std::vector<FValue> ValueCheck;
	std::vector<int> CalValue;
	int result = 0;
	int n;
	std::cin >> n;

	ValueCheck.resize(n);
	CalValue.resize(n);

	for (int i = 0; i < n; i++)
	{
		std::cin >> ValueCheck[i].Value;
	}

	DFS(ValueCheck, CalValue, 0, result);

	std::cout << result<<"\n";
	return 0;
}