NYOJ--325--深度优先搜索--zb的生日
/* Name: NYOJ--325--zb的生日 Author: shen_渊 Date: 15/04/17 08:18 Description: 输入时计算总质量,DFS搜索和总质量差值一般最接近的质量和,当val已经大于总质量一般时剪枝 清空数组 DFS:选与不选 */ #include<iostream> #include<cstring> #include<algorithm> using namespace std; void dfs(int,int); int n,watermelon[23]; int cut,min_val,v2; int main(){ // freopen("in.txt","r",stdin); while(cin>>n){ cut = 0; min_val = 0xfffffff; memset(watermelon,0,sizeof(watermelon)); int i; for(i=0; i<n; ++i){ cin>>watermelon[i]; cut += watermelon[i]; } if(n==1){ min_val = watermelon[0]; }else{ v2 = cut / 2; dfs(1,watermelon[0]); } cout<<min_val<<endl; } return 0; } void dfs(int ct,int val){ if(ct > n)return ; int t = abs(cut - 2*val); if(t<min_val)min_val = t; if(val > v2)return ;//继续增大val没什么用 dfs(ct+1,val+watermelon[ct]) ; dfs(ct+1,val); }