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;
}
#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;
}