技巧    
    可行性01背包
思路
    尽量平均分  那么最好的可能就是一人一半 ,如果奇数个数的话就是拆成n和n+1。
    那将问题转换成这一对苹果能否装满容量为 sum / 2重量的背包。 如果不能,做多能塞满多少。
    所以就是很明显的可行性01背包问题
实现
package main

import (
	"bufio"
	. "fmt"
	"io"
	"os"
)

func NC17871(_r io.Reader, _w io.Writer) {
	in, out := bufio.NewReader(_r), bufio.NewWriter(_w)
	defer out.Flush()
	var n int
	Fscan(in, &n)
	a := make([]int, n+1)
	sum := 0
	for i := 1; i <= n; i++ {
		Fscan(in, &a[i])
		sum += a[i]
	}
	avg := sum / 2
	dp := [105][5005]bool{}
	dp[0][0] = true

	for i := 1; i <= n; i++ {
		for j := avg; j >= 0; j-- {
			dp[i][j] = dp[i-1][j]
			if !dp[i][j] && j-a[i] >= 0 {
				dp[i][j] = dp[i][j] || dp[i-1][j-a[i]]
			}
		}
	}

	for i := avg; i >= 0; i-- {
		if dp[n][i] {
			Fprintln(out, i, sum-i)
		}
	}

}
func main() {
	NC17871(os.Stdin, os.Stdout)
}