AOJ 1045 Split Up!

問題

http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=1045

日本語。

解法

適当にDFSすればできる。

コード

int n;
int a[128];

int dfs(int p, int g, int c){
  if(n == c) return abs(p-g);
  return min(dfs(p+a[c], g, c+1), dfs(p, g+a[c], c+1));
}

int main(){
  while(scanf("%d", &n) && n){
    rep(i, n) scanf("%d", a+i);
    printf("%d\n", dfs(0, 0, 0));
  }
  return 0;
}

再帰の部分が簡潔にかけたと思う。