拔河遊戲 SSL 1638

2021-07-28 06:29:33 字數 1306 閱讀 3086

description

乙個學校舉行拔河比賽,所有的人被分成了兩組,每個人必須(且只能夠)在其中的一組,要求兩個組的人數相差不能超過1,且兩個組內的所有人體重加起來盡可能地接近。

input

輸入資料的第1行是乙個n,表示參加拔河比賽的總人數,n<=100,接下來的n行表示第1到第n個人的體重,每個人的體重都是整數(1

<=weight<=450)。

output

輸出資料應該包含兩個整數:分別是兩個組的所有人的體重和,用乙個空格隔開。注意如果這兩個數不相等,則請把小的放在前面輸出。

sample input

3100

90200

sample output

190200

題解:這道題用dp,用max和min記錄最大和最小的體重和,if f[j,k] then f[j+1,k+a[i]]:=true;

var a:array[0..100] of longint;

f:array[0..50,0..45000] of boolean;

i,k,n,j,sum,s,min1,max:longint;

function

min(a,b:longint):longint;

begin

if bthen

begin

min:=b;

max:=a;

endelse

begin

min:=a;

max:=b;

end;

end;

begin

readln(n);

for i:=1

to n do

begin

readln(a[i]);

sum:=sum+a[i];

end;

f[0,0]:=true;

for i:=1

to n do

for j:=n div

2downto0do

for k:=sum downto0do

if f[j,k] then f[j+1,k+a[i]]:=true;

min1:=50000;

for k:=0

to sum do

if f[n div

2,k] and (abs(k-sum+k)then

begin

min1:=abs(k-sum+k);

s:=k;

end;

writeln(min(s,sum-s),' ',max);

end.

SSL 1638 拔河比賽

乙個學校舉行拔河比賽,所有的人被分成了兩組,每個人必須 且只能夠 在其中的一組,要求兩個組的人數相差不能超過1,且兩個組內的所有人體重加起來盡可能地接近。輸入資料的第1行是乙個n,表示參加拔河比賽的總人數,n 100,接下來的n行表示第1到第n個人的體重,每個人的體重都是整數 1 weight 45...

ssl2293 暗黑遊戲

暗黑遊戲 time limit 10000ms memory limit 65536k total submit 87 accepted 50 case time limit 1000ms description 暗黑遊戲中,裝備直接決定玩家人物的能力。可以使用pg和rune購買需要的物品。暗黑市場...

SSL 1028 數字遊戲

description 丁丁最近沉迷於乙個數字遊戲之中。這個遊戲看似簡單,但丁丁在研究了許多天之後卻發覺原來在簡單的規則下想要贏得這個遊戲並不那麼容易。遊戲是這樣的,在你面前有一圈整數 一共n個 你要按順序將其分為m個部分,各部分內的數字相加,相加所得的m個結果對10取模後再相乘,最終得到乙個數k。...