我要两天刷完所有n道水题,做出第i道题能获得a[i]点积分。现在我想要两天获得的积分尽量平均,问最小差多少?

【输入】

第一行一个整数n,第二行n个整数,第i个整数a[i]表示做第i道水题获得的积分。

【输出】

一个整数,表示两天积分的最小差值。

【样例输入】

5

5 8 13 27 14

【样例输出】

3

【输出说明】

(8+27)-(5+13+14)=3(积分)

水题4类似,只不过总时间为所有积分总和的一半。(想想为什么)

 1 #include<iostream>
 2 using namespace std;
 3 int a[105];
 4 bool dp[100005]={1};
 5 int main()
 6 {
 7     int n,sum=0;
 8     cin>>n;
 9     int i,j;
10     for(i=1;i<=n;i++)
11     {
12         cin>>a[i];
13         sum+=a[i];
14     }
15     for(i=1;i<=n;i++)
16         for(j=sum/2;j>=1;j--)
17             if(j>=a[i])
18                 dp[j]=dp[j-a[i]];
19     for(i=sum/2;i>=0;i--)
20         if(dp[i])
21         {
22             cout<<sum-i*2;
23             return 0;
24         }
25     return 0;
26 }