#include<stdio.h>
int n,w,g[21],A,B,C,ans=987654321;
bool dt[2][834][834];
void fill_dt() {
dt[0][0][0]=true;
for(int i=1;i<=n;i++)
for(int b=0;b<=834;b++)
for(int c=0;c<=834;c++)
dt[i%2][b][c]=(dt[(i-1)%2][b][c] ||
(b-g[i]<0?false:dt[(i-1)%2][b-g[i]][c]) ||
(c-g[i]<0?false:dt[(i-1)%2][b][c-g[i]]));
}
void solve() {
for(int b=0;b<=834;b++)
for(int c=0;c<=834;c++)
if(dt[n%2][b][c]) {
int a=w-(b+c);
if(a>=b && b>=c && a-c<=ans) {
ans=a-c;
A=a; B=b; C=c;
}
}
}
int main() {
scanf("%d",&n);
for(int i=1;i<=n;i++) {
scanf("%d",g+i);
w+=g[i];
}
fill_dt();
solve();
printf("%d",C);
}
어디가 틀린거일까요..
댓글 0