SSL 1638 拔河比賽

2021-10-11 21:44:47 字數 974 閱讀 1488

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

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

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

3

10090

200

190

200

同樣dp

第一種解法

設dp[x][y][z]表示前x個取y個能否剛好為z,易得動態轉移方程

dp[i][j][k]=dp[i-1][j][k]||dp[i-1][j-1][k-w[i]](1<=i<=n,1<=j<=i/2,1<=k<=j*450)

但是容易看出,第一維直接刪掉不會影響,避免mle

沒有打**,請自行實現我好懶啊

第二種解法

設dp[x][y][z]表示前x個取y個能否剛好為z

dp[i][j][k]=dp[i-1][j][k]||dp[i-1][j-1][k-w[i]](1<=i<=n,a[i]>=j>=w[i],1<=k<=n/2)(a是w的字首和)

同樣刪掉第一維

注意輸出求最優解

#include

#include

using

namespace std;

int n,a[

110]

,b[110

],m=

0x7f7f7f7f

,x,y;

bool dp[

45010][

60];intab(

int d)

intmain()

拔河遊戲 SSL 1638

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

code vs拔河比賽

時間限制 1 s 空間限制 128000 kb 題目等級 gold 題解 檢視執行結果 乙個學校舉行拔河比賽,所有的人被分成了兩組,每個人必須 且只能夠 在其中的一組,要求兩個組的人數相差不能超過1,且兩個組內的所有人體重加起來盡可能地接近。輸入描述 input description 資料的第1行...

拔河比賽 DP

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