nyoj325-zb的生日
2017-03-13 19:52
274 查看
思路:
搜索+剪
#include <iostream>
#include <queue>
#include <stdio.h>
#include <algorithm>
#include <cmath>
#include <cstring>
using namespace std;
int a[105];
int n;
int sum;
int ans=0x3f3f3f3f;
void dfs(int pos,int num)
{
if(pos==n+1)
{
int tep=sum-num;
tep=tep-(sum-tep);
if(tep<0)
tep=-tep;
ans=min(ans,tep);
return ;
}
if(num>sum/2)
{
ans=min(ans,sum-num);
return ;
}
for(int i=pos;i<=n;i++)
{
dfs(i+1,num+a[i]);
}
}
int main()
{
while(~scanf("%d",&n))
{
ans=0x3f3f3f3f;
sum=0;
for(int i=1;i<=n;i++)
scanf("%d",&a[i]),sum+=a[i];
sort(a+1,a+1+n);
dfs(1,0);
printf("%d\n",ans);
}
}
搜索+剪
#include <iostream>
#include <queue>
#include <stdio.h>
#include <algorithm>
#include <cmath>
#include <cstring>
using namespace std;
int a[105];
int n;
int sum;
int ans=0x3f3f3f3f;
void dfs(int pos,int num)
{
if(pos==n+1)
{
int tep=sum-num;
tep=tep-(sum-tep);
if(tep<0)
tep=-tep;
ans=min(ans,tep);
return ;
}
if(num>sum/2)
{
ans=min(ans,sum-num);
return ;
}
for(int i=pos;i<=n;i++)
{
dfs(i+1,num+a[i]);
}
}
int main()
{
while(~scanf("%d",&n))
{
ans=0x3f3f3f3f;
sum=0;
for(int i=1;i<=n;i++)
scanf("%d",&a[i]),sum+=a[i];
sort(a+1,a+1+n);
dfs(1,0);
printf("%d\n",ans);
}
}
相关文章推荐
- 【DFS】NYOJ-325-zb的生日
- NYOJ-325 zb的生日(01背包模板)
- NYOJ325 zb的生日(01背包,深搜DFS)
- 4000 NYOJ 325 zb的生日
- nyoj325 zb的生日 (深度搜索)(动态规划)
- nyoj 325 zb的生日
- NYOJ_325_zb的生日
- NYOJ 325 zb的生日+NYOJ 456 邮票分你一半
- NYOJ - 325 - zb的生日(dfs减枝,)
- NYOJ 325 zb的生日
- NYOJ 325 zb的生日 【0 1 背包】
- NYOJ 题目325 zb的生日(01背包,险过)
- nyoj 325 zb的生日 & nyoj 456 邮票分你一半
- nyoj 325 zb的生日 dfs
- NYOJ 325 zb的生日(搜索解平分问题)
- NYOJ325 zb的生日(深搜DFS)
- NYOJ 325 ZB的生日
- nyoj325 zb的生日
- nyoj 325 zb的生日【0-1背包】
- nyoj 325-zb的生日