【dfs】拔河比赛(ybtoj dfs-1-1)
生活随笔
收集整理的這篇文章主要介紹了
【dfs】拔河比赛(ybtoj dfs-1-1)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
拔河比賽
ybtoj dfs-1-1
題目大意
給你n個數,讓你分成兩堆,使其數量相差不大于1,問數值相差最小是多少
輸入樣例
1 3 55 50 100輸出樣例
5數據范圍
1?T?501\leqslant T \leqslant 501?T?50
2?N?202\leqslant N\leqslant 202?N?20
30?Wi?12030\leqslant W_i\leqslant 12030?Wi??120
解題思路
因為N很小,直接枚舉每個數放在哪邊即可
代碼
#include<cstdio> #include<cstring> #include<iostream> #include<algorithm> #define ll long long #define N 25 using namespace std; int t, n, ans, a[N]; void dfs(int x, int l, int g) {if (x > n){ans = min(ans, abs(g));return;}if (l < (n + 1) / 2) dfs(x + 1, l + 1, g + a[x]);//放左邊if (x - l <= (n + 1) / 2) dfs(x + 1, l, g - a[x]);//右邊return; } int main() {scanf("%d", &t);while(t--){ans = 120*N;scanf("%d", &n);for (int i = 1; i <= n; ++i)scanf("%d", &a[i]);dfs(1, 0, 0);printf("%d\n", ans);}return 0; } 創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的【dfs】拔河比赛(ybtoj dfs-1-1)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 深入了解dell笔记本系列 系列和型号有
- 下一篇: 卫星电视信号接收锅怎么升级