题目传送门

 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相关推荐

  1. URAL 1152. False Mirrors(DP)

    题目链接 理解了题意之后,就不难了..状态压缩+暴力. 1 #include <cstring> 2 #include <cstdio> 3 #include <stri ...

  2. poj1564 Sum It Up dfs水题

    题目描述: Description Given a specified total t and a list of n integers, find all distinct sums using n ...

  3. HDU - Reversi(dfs+水题)

    题目链接:点击查看 题目大意:下棋游戏,简单描述一下规则就是,当轮到某一个颜色的棋子操作时,必须在可以吃掉对方棋子的地方下棋,所谓吃掉,就是下棋的地方可以和任意一个己方棋子可以连成一条直线,直线之中至 ...

  4. How far away ?(dfs水题)

    There are n houses in the village and some bidirectional roads connecting them. Every day peole alwa ...

  5. nssl1320,jzoj(初中)2108-买装备【dfs,水题】

    正题 题目大意 nnn个物品有ai,bi,via_i,b_i,v_iai​,bi​,vi​,要求 选择若干个物品使得aia_iai​之和大于AAA,bib_ibi​之和大于BBB,viv_ivi​之和 ...

  6. NoiOpenjudge水题选刷之_搜索

    1789:算24 给出4个小于10个正整数,你可以使用加减乘除4种运算以及括号把这4个数连接起来得到一个表达式.现在的问题是,是否存在一种方式使得得到的表达式的结果等于24. 这里加减乘除以及括号的运 ...

  7. HPU 第三次积分赛:阶乘之和(水题)

    阶乘之和 描述 对于整数pp,给出以下定义 p=x_{1}!+x_{2}!+x_{3}!+...+x_{q}!(x_{i}<x_{j}for\ all\ i<j )p=x1​!+x2​!+ ...

  8. HDU2673-shǎ崽(水题)

    如果不能够直接秒杀的题,就不算水题.又应证了那句话,有时候,如果在水题上卡住,那么此题对于你来说,也就不算是水题了额~~ 刚睡醒,迷迷糊糊. 题目的意思很简单,求一个最大的,再求一个最小的.几乎是什么 ...

  9. 图论刷水题记录(二)(最短路-----SPFA算法)

    继第一篇的后续,又来刷水题了,写的是SPFA算法,这个算法的复杂度比较玄学,感觉能不用就不用了,但是他的好处就是可以判断负圈. 3月26日: 1.POJ 1847 Tram 题意:在一个交通网络上有N ...

最新文章

  1. 那些在一个公司死磕了5-10年的程序员,最后都怎么样了?
  2. Verilog HDL 使用规范(一)
  3. 标准STUN判断NAT类型的过程及改进
  4. POJ 1422 Air Raid (最小路径覆盖)
  5. SqlServer分区表概述(转载)
  6. vue打包配置的详细说明【config/index.js的build部份】
  7. denali vip使用经验
  8. My validator 0.1 不支持 ajax 环境
  9. python-MongoDB可视化工具Robomongo 和 Mongochef
  10. Linux fstab文件详解
  11. Qt QAbstractSocket::isValid()
  12. php span标签什么意思,htmlspan标签是什么意思?span标签的作用详解
  13. Java基础(数组)数组缩减
  14. 游戏开发需要具备哪些技术?
  15. DEBUG指示灯详细说明
  16. 文科妹学 GitHub 简易教程(转)
  17. 炒股精髓:多位高手多年心血结晶(推荐)
  18. java word 颜色设置_通过Java设置Word页面背景色过程详解
  19. Percona Xtrabackup安装
  20. android 文件删除不了

热门文章

  1. python解决问题asp_用python实现面向对像的ASP程序实例
  2. python爬取方式_Python 爬虫入门(三)—— 寻找合适的爬取策略
  3. jwt token注销_辩证的眼光搞懂 JWT 这个知识点
  4. uWSGI 和 nginx 的区别?
  5. python网络通信
  6. 短信发送:webservice调用第三方接口发送短信
  7. (1) 基于tomcat7和jdk1.7的websocket启动
  8. mysql 建表代码
  9. outlook邮箱限额满了
  10. ssm整合2 增删改