#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cmath>
#define N 25
using namespace std;
int minx,sum,n;
int s[N];
bool flag;
void dfs(int sum1,int cur)
{
if(flag||cur==n) return;
if(abs(sum-2*sum1)<minx)
{
minx=abs(sum-2*sum1);
if(!minx)
{
flag=true;
return;
}
}
dfs(sum1+s[cur],cur+1);
dfs(sum1,cur+1);
}
int main()
{
while(~scanf("%d",&n))
{
sum=0,minx=0xfffffff;
flag=false;
for(int i=0;i<n;++i)
{
scanf("%d",&s[i]);
sum+=s[i];
}
dfs(0,0);
printf("%d\n",minx);
}return 0;
} zb的生日&&dfs
本文介绍了一个使用深度优先搜索解决背包问题的C++实现方案。该算法通过递归地选择物品加入背包来寻找两组物品价值最接近的组合,旨在最小化两组之间的差异。文章中的代码实现了基于回溯法的解决方案,并通过一个输入读取循环来处理多个测试用例。


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



