NYOJ-235 zb的生日 AC 分类: NYOJ 2013-12-30 23:10 183人阅读 评论(0) 收藏
DFS算法:
#include<stdio.h> #include<math.h> void find(int k,int w); int num[23]={0}; int min=20001; int n,max=0; void find(int k,int w){ int sum=(int)fabs(max-w-w); if(k==n)return; if(sum<min)min=sum; find(k+1,w+num[k]); find(k+1,w); } int main(){ int i; while(scanf("%d",&n)!=EOF){ for(i=0;i<n;i++){ scanf("%d",&num[i]); max+=num[i]; } find(0,0); printf("%d\n",min); max=0; min=23456; } return 0;}
01背包算法:
#include <stdio.h> #include <iostream> #include <string.h> #include <algorithm> using namespace std; #define swap(x,y){x^=y;y^=x;x^=y;} #define max(x,y) x>y?x:y int w[25],dp[100010]; int main(){ int i,j,n,m,tat; while(scanf("%d",&n)!=EOF){ m=0; tat=0; memset(dp,0,sizeof(dp)); for(i=1;i<=n;i++){ scanf("%d",&w[i]); tat+=w[i]; } m=tat/2; for(i=1;i<=n;i++){ for(j=m;j>=w[i];j--){ dp[j]=max(dp[j-w[i]]+w[i],dp[j]); } } cout<<tat-2*dp[m]<<endl; } return 0; }
表示通过大神们的支持,才寻觅到正确答案,坑爹的题目,01背包的时间比DFS的时间要短,所以,首选01背包。晚安
本文为博主原创文章,未经博主允许不得转载。