拔河比賽 DFS

2021-10-17 03:03:35 字數 745 閱讀 2125

>link

>解題思路

一道非常典型的dfs,通過維護人數不超過總人數的一半來剪枝

為了方便,我dfs的時候用乙個變數c來記錄兩隊體重之差,左邊隊的就+,右邊隊的就-,最後取c的絕對值

>**

#include 

#include

#include

#include

#include

#define n

30#define inf 1

<<

30using namespace std;

int t

, n, w[n]

, ans;

void

dfs(int now, int cnt1, int cnt2, int c)

if(cnt1 < n /2+

(n &1)

)dfs

(now +

1, cnt1 +

1, cnt2, c + w[now]);

if(cnt2 < n /2+

(n &1)

)dfs

(now +

1, cnt1, cnt2 +

1, c - w[now]);

}void

work()

int main()

code vs拔河比賽

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

拔河比賽 DP

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

DP 拔河比賽

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