0
균형 분할 문제를 this link에서 해결했습니다. 이 질문에서 우리는 합계의 차이가 최소가되도록 같은 부분으로 배열을 나눠야합니다. 그래서, 제가 발견 한 해결책은 모든 요소를 하나의 그룹에 포함할지 여부를 결정하는 것입니다. 그렇지 않으면 2^n 개의 모든 경우를 시도해야합니다.균형 분할 논리를 이해하는 데 어려움이 있습니다
내가 비트 조작을 사용하여 어레이를 나눈 솔루션을 생각해 냈습니다. 로직을 얻지 못했습니다. 아래 코드를 게시하고 있습니다. 누군가 어떻게 배열을 나누는 지 말해 주시겠습니까?
#include<bits/stdc++.h>
using namespace std;
#define N 11
void solve(int a[N])
{
long long x,y,v1,v2,res,i,j;
long long val=1<<N;
res=INT_MAX;
for(i=0;i<val;i++)
{
x=y=v1=v2=0;
for(j=0;j<N;j++)
{
if(i & (1<<j))
{
x++;
v1+=a[j];
}
else
{
y++;
v2+=a[j];
}
}
if(abs(x-y)<=1) res=min(res,abs(v1-v2));
}
cout<<res<<endl;
}
int main()
{
int a[] = {23, 45, -34, 12, 0, 98, -99, 4, 189, -1, 4};
solve(a);
return 0;
}