题目:
一个学校举行拔河比赛,所有的人被分成了两组,每个人必须(且只能够)在其中的一组,要求两个组的人数相差不能超过1,且两个组内的所有人体重加起来尽可能地接近。
输入:
输入数据的第1行是一个n,表示参加拔河比赛的总人数,n<=100,接下来的n行表示第1到第n个人的体重,每个人的体重都是整数(1<=weight<=450
样例输入:
3
100
90
200
输出:
输出数据应该包含两个整数:分别是两个组的所有人的体重和,用一个空格隔开。注意如果这两个数不相等,则请把小的放在前面输出
样例输出:
190 200
思路:
这道题要先把重量除以2(算出中间值),除了2后还要看是奇数还是偶数,就这道题目而言,当前n-1个人的分组方案达到最优时,并不意味着前n个人的分组方案也最优。但题目中标注出每个人的最大体重为450,这就提醒我们可以从这里入手,否则的话,命题者大可把最大体重标注到长整型。
代码:
#include<cstdio>
#include<iostream>
using namespace std;
int a[105],f[105][45005],sum,