2443 分成两组【51nod】

题目链接
类似的题目

解题思路

  • 直接搜索:选与不选
  • 时间复杂度 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;
}

猜你喜欢

转载自blog.csdn.net/SYaoJun/article/details/117716308