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;
}