我要两天刷完所有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 }