分析:两个人平分硬币,要求最后两者的差值最小。
相当于一个人利用背包获得硬币,背包的容量相当于总价值的一半。
#include<stdio.h>
#include<string.h>
int main()
{
int t,n,v[101],dp[50010],sum;
scanf("%d",&t);
while (t--)
{
//获取数据
scanf("%d",&n);
sum=0;
for(int i=1;i<=n;i++)
{
scanf("%d",&v[i]);
sum+=v[i];
}
//数据初始化
memset(dp,0,sizeof(dp));
//利用公式进行递推
for(int i=1;i<=n;i++)
for(int j=sum/2;j>=v[i];j--)
dp[j]=dp[j]>dp[j-v[i]]+v[i]?dp[j]:dp[j-v[i]]+v[i];
printf("%d
",sum-2*dp[sum/2]);
}
return 0;
}