時間限制: 1 s空間限制: 128000 KB題目等級 : 黃金 Gold app
一個學校舉行拔河比賽,全部的人被分紅了兩組,每一個人必須(且只可以)在其中的一組,要求兩個組的人數相差不能超過1,且兩個組內的全部人體重加起來儘量地接近。spa
數據的第1行是一個n,表示參加拔河比賽的總人數,n<=100,接下來的n行表示第1到第n我的的體重,每一個人的體重都是整數(1<=weight<=450)。code
包含兩個整數:分別是兩個組的全部人的體重和,用一個空格隔開。注意若是這兩個數不相等,則請把小的放在前面輸出。blog
3
100
90
200ip
190 200io
1 #include<cstdio> 2 int n,tt,tot,ans; 3 int s[101]; 4 int f[101][30001]; 5 int main(){ 6 scanf("%d",&n),tt=(n+1)/2; 7 for(int i=1;i<=n;i++) scanf("%d",&s[i]),tot+=s[i]; 8 f[0][0]=1,ans=tot/2; 9 for(int i=1;i<=n;i++) 10 for(int j=tt;j>=0;j--) 11 for(int k=0;k<=ans;k++) 12 if(f[j][k]) f[j+1][k+s[i]]=1; 13 for(int i=ans;i>=0;i--) 14 if(f[tt][i]||f[tt-1][i]){ans=i;break;} 15 printf("%d %d\n",ans,tot-ans); 16 return 0; 17 }