#include<stdio.h>
#include<string.h>
using namespace std;
int val[500001];
int main()
{
int n,m,i,j,sum;
int a[1001];
scanf("%d",&m);
while(m--)
{
memset(val,0,sizeof(val));
scanf("%d",&n);
sum=0;
for(i=0;i<n;++i)
{
scanf("%d",&a[i]);
sum+=a[i];
}
for(i=0;i<n;++i)
for(j=sum/2;j>=a[i];--j)
if(val[j]<val[j-a[i]]+a[i])
val[j]=val[j-a[i]]+a[i];
printf("%d\n",sum-2*val[sum/2]);
}
return 0;
}
#include<string.h>
using namespace std;
int val[500001];
int main()
{
int n,m,i,j,sum;
int a[1001];
scanf("%d",&m);
while(m--)
{
memset(val,0,sizeof(val));
scanf("%d",&n);
sum=0;
for(i=0;i<n;++i)
{
scanf("%d",&a[i]);
sum+=a[i];
}
for(i=0;i<n;++i)
for(j=sum/2;j>=a[i];--j)
if(val[j]<val[j-a[i]]+a[i])
val[j]=val[j-a[i]]+a[i];
printf("%d\n",sum-2*val[sum/2]);
}
return 0;
}
本文介绍了一种使用C++解决背包问题的方法。通过输入物品数量和容量等参数,程序能够计算出最大价值,并采用动态规划算法来寻找最优解。适用于算法学习及优化问题求解。

被折叠的 条评论
为什么被折叠?



