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相关推荐
- URAL 1152. False Mirrors(DP)
题目链接 理解了题意之后,就不难了..状态压缩+暴力. 1 #include <cstring> 2 #include <cstdio> 3 #include <stri ...
- poj1564 Sum It Up dfs水题
题目描述: Description Given a specified total t and a list of n integers, find all distinct sums using n ...
- HDU - Reversi(dfs+水题)
题目链接:点击查看 题目大意:下棋游戏,简单描述一下规则就是,当轮到某一个颜色的棋子操作时,必须在可以吃掉对方棋子的地方下棋,所谓吃掉,就是下棋的地方可以和任意一个己方棋子可以连成一条直线,直线之中至 ...
- How far away ?(dfs水题)
There are n houses in the village and some bidirectional roads connecting them. Every day peole alwa ...
- nssl1320,jzoj(初中)2108-买装备【dfs,水题】
正题 题目大意 nnn个物品有ai,bi,via_i,b_i,v_iai,bi,vi,要求 选择若干个物品使得aia_iai之和大于AAA,bib_ibi之和大于BBB,viv_ivi之和 ...
- NoiOpenjudge水题选刷之_搜索
1789:算24 给出4个小于10个正整数,你可以使用加减乘除4种运算以及括号把这4个数连接起来得到一个表达式.现在的问题是,是否存在一种方式使得得到的表达式的结果等于24. 这里加减乘除以及括号的运 ...
- HPU 第三次积分赛:阶乘之和(水题)
阶乘之和 描述 对于整数pp,给出以下定义 p=x_{1}!+x_{2}!+x_{3}!+...+x_{q}!(x_{i}<x_{j}for\ all\ i<j )p=x1!+x2!+ ...
- HDU2673-shǎ崽(水题)
如果不能够直接秒杀的题,就不算水题.又应证了那句话,有时候,如果在水题上卡住,那么此题对于你来说,也就不算是水题了额~~ 刚睡醒,迷迷糊糊. 题目的意思很简单,求一个最大的,再求一个最小的.几乎是什么 ...
- 图论刷水题记录(二)(最短路-----SPFA算法)
继第一篇的后续,又来刷水题了,写的是SPFA算法,这个算法的复杂度比较玄学,感觉能不用就不用了,但是他的好处就是可以判断负圈. 3月26日: 1.POJ 1847 Tram 题意:在一个交通网络上有N ...
最新文章
- 那些在一个公司死磕了5-10年的程序员,最后都怎么样了?
- Verilog HDL 使用规范(一)
- 标准STUN判断NAT类型的过程及改进
- POJ 1422 Air Raid (最小路径覆盖)
- SqlServer分区表概述(转载)
- vue打包配置的详细说明【config/index.js的build部份】
- denali vip使用经验
- My validator 0.1 不支持 ajax 环境
- python-MongoDB可视化工具Robomongo 和 Mongochef
- Linux fstab文件详解
- Qt QAbstractSocket::isValid()
- php span标签什么意思,htmlspan标签是什么意思?span标签的作用详解
- Java基础(数组)数组缩减
- 游戏开发需要具备哪些技术?
- DEBUG指示灯详细说明
- 文科妹学 GitHub 简易教程(转)
- 炒股精髓:多位高手多年心血结晶(推荐)
- java word 颜色设置_通过Java设置Word页面背景色过程详解
- Percona Xtrabackup安装
- android 文件删除不了