日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

DFS水题 URAL 1152 False Mirrors

發布時間:2024/1/17 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 DFS水题 URAL 1152 False Mirrors 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

?

題目傳送門

1 /* 2 題意:一個圈,每個點有怪獸,每一次射擊能消滅它左右和自己,剩余的每只怪獸攻擊 3 搜索水題:sum記錄剩余的攻擊總和,tot記錄承受的傷害,當傷害超過ans時,結束,算是剪枝吧 4 回溯寫挫了,程序死循環,跑不出來。等回溯原理搞清楚了,下次自己重寫一遍:) 5 */ 6 #include <cstdio> 7 #include <algorithm> 8 #include <cstring> 9 #include <cmath> 10 #include <iostream> 11 using namespace std; 12 13 const int MAXN = 25; 14 const int INF = 0x3f3f3f3f; 15 int a[MAXN]; 16 bool vis[MAXN]; 17 int n, ans; 18 19 void DFS(int sum, int tot) 20 { 21 if (tot >= ans) return ; 22 if (sum == 0) {ans = min (ans, tot); return ;} 23 24 for (int i=1; i<=n; ++i) 25 { 26 if (!vis[i]) 27 { 28 vis[i] = true; 29 int s1 = (i == 1) ? n : i - 1; 30 int s2 = (i == n) ? 1 : i + 1; 31 if (vis[s1]) s1 = 24; 32 if (vis[s2]) s2 = 24; 33 vis[s1] = true; vis[s2] = true; 34 sum -= a[s1]; sum -= a[s2]; sum -= a[i]; 35 36 tot += sum; 37 DFS (sum, tot); 38 tot -= sum; 39 40 sum += a[s1]; sum += a[s2]; sum += a[i]; 41 vis[s1] = false; vis[s2] = false; vis[i] = false; 42 } 43 } 44 } 45 46 int main(void) //URAL 1152 False Mirrors 47 { 48 //freopen ("N.in", "r", stdin); 49 50 while (scanf ("%d", &n) == 1) 51 { 52 int sum = 0; a[24] = 0; 53 for (int i=1; i<=n; ++i) {scanf ("%d", &a[i]); sum += a[i];} 54 memset (vis, false, sizeof (vis)); 55 56 ans = INF; DFS (sum, 0); 57 printf ("%d\n", ans); 58 } 59 60 return 0; 61 }

?

轉載于:https://www.cnblogs.com/Running-Time/p/4497663.html

創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎

總結

以上是生活随笔為你收集整理的DFS水题 URAL 1152 False Mirrors的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。