题目链接
类似的题目
解题思路
- 直接搜索:选与不选
- 时间复杂度 O ( 2 n ) O(2^n) O(2n)由于 n = 20 n=20 n=20所以时间在 1 0 6 10^6 106左右
#include <iostream>
#include <algorithm>
#include <cstring>
using namespace std;
const int N = 22;
int a[N];
typedef long long LL;
LL n, sum = 0, ans = 0x7fffffff;
void dfs(int u, LL cur){
if(u >= n){
ans = min(ans, abs(sum - cur - cur));
return;
}
dfs(u+1, cur+a[u]); //选
dfs(u+1, cur); //不选
}
int main(){
cin>>n;
for(int i = 0; i < n; i++) {
cin>>a[i];
sum += a[i];
}
dfs(0, 0);
cout<<ans<<endl;
return 0;
}