Ural 1005 Stone Pilet 解题报告

题意:

把所给出的石头分成两堆,使两堆的差最小。

思路:

这道题可以用01背包写。。也可以直接暴力。。。题上的数据范围决定了dp的效率没有暴力的高。。

代码:

#include <iostream>
#include
<algorithm>
#include
<cstring>
#include
<cmath>
usingnamespace std;

int a[23];
int sumAll;
int def;
void DFS(int sum,int i)
{
if(i<0) return;
int temp=abs(sumAll-2*sum);
if(def>temp) def=temp;
DFS(sum
+a[i],i-1);
DFS(sum,i
-1);
}


int main()
{

int n;
cin
>>n;

memset(a,
0,sizeof(a));
int i=0;
sumAll
=0;
def
=0x7fffffff-1;
for(;i<n;i++)
{
cin
>>a[i];
sumAll
+=a[i];
}

DFS(
0,n-1);
cout
<<def<<endl;






return0;
}
posted @ 2011-06-09 08:51  andyidea  阅读(279)  评论(1编辑  收藏  举报