标签:
描述今天是阴历七月初五,acm队员zb的生日。zb正在和C小加、never在武汉集训。他想给这两位兄弟买点什么庆祝生日,经过调查,zb发现C小加和never都很喜欢吃西瓜,而且一吃就是一堆的那种,zb立刻下定决心买了一堆西瓜。当他准备把西瓜送给C小加和never的时候,遇到了一个难题,never和C小加不在一块住,只能把西瓜分成两堆给他们,为了对每个人都公平,他想让两堆的重量之差最小。每个西瓜的重量已知,你能帮帮他么?
5 5 8 13 27 14
3
1 #include <iostream> 2 #include <cmath> 3 using namespace std; 4 #define INF 10000000 5 int weight[25]; 6 int total,sum,Min,n; 7 void dfs(int cur,int sum) 8 { 9 if(cur==n) 10 return; 11 Min=Min>(int)fabs(total-2*sum)?(int)fabs(total-2*sum):Min; 12 dfs(cur+1,sum+weight[cur]); /*取和不取两种情况*/ 13 dfs(cur+1,sum); 14 } 15 int main() 16 { 17 int i,j; 18 while(cin>>n) 19 { 20 total=0; 21 for(i=0;i<n;i++) 22 { 23 cin>>weight[i]; 24 total+=weight[i]; 25 } 26 Min=INF; 27 dfs(0,0); 28 cout<<Min<<endl;; 29 } 30 }
TLE
1 #include <iostream> 2 #include <cmath> 3 #include <cstring> 4 using namespace std; 5 #define INF 10000000 6 int weight[25]; 7 int dp[200010]; 8 int total,sum,Min,n; 9 int main() 10 { 11 int i,j,k; 12 while(cin>>n) 13 { 14 memset(dp,0,sizeof(dp)); 15 total=0; 16 for(i=1;i<=n;i++) 17 { 18 cin>>weight[i]; 19 total+=weight[i]; 20 } 21 for(i=1;i<=n;i++) 22 { 23 for(k=total/2;k>=weight[i];k--) 24 d p[k]=max(dp[k],dp[k-weight[i]]+weight[i]); 25 } 26 cout<<total-dp[total/2]*2<<endl; 27 28 } 29 }
标签:
原文地址:http://www.cnblogs.com/a1225234/p/4869044.html