题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1224

题目解析: 这道题可以用DFS或者DP解决,
第一直观反应是DFS,广度搜索,
void dfs(int u, int dep, int val)
第一个参数 u是已经到达的城市, 参数dep是当前路径长度,val是到当前城市累计的兴趣值。

从 dfs(1, 1, 0) 开始,即从第一个城市开始,路径是1,按题意起始第一个城市兴趣值是0;
dfs搜索结束条件是u走到第n+1城市即回到开始起点城市,按题意1和n+1两个值代表同一个起点城市。

#include <algorithm>
#include <cstdio>
#include <cstring>
#include <iostream>
#include <memory>
using namespace std;
const int maxn = 200;
int G[maxn][maxn];  //储存图
int ins[maxn];      //兴趣点
int circle[maxn];   //储存执行中的路径
int sum;            //总的值
int t, n, m, x, y;
int ans[maxn];  //储存答案兴趣值最大的路径
int len;
void dfs(int u, int dep, int val) {if (u == n + 1) {if (val > sum)  //判断{sum = val;for (int i = 0; i < dep; i++) ans[i] = circle[i];len = dep;}return;}for (int i = u + 1; i <= n + 1; i++)  //从u+1开始if (G[u][i]) { //存在航班circle[dep] = i;dfs(i, dep + 1, val + ins[i]);}
}
int main() {int case = 0;scanf("%d", &t);while (t--) {memset(G, 0, sizeof(G));  //初始化memset(ins, 0, sizeof(ins));memset(circle, 0, sizeof(circle));scanf("%d", &n);for (int i = 1; i <= n; i++) scanf("%d", &ins[i]);scanf("%d", &m);for (int i = 1; i <= m; i++)  //建立图{scanf("%d %d", &x, &y);G[x][y] = 1;}sum = 0;circle[0] = 1;dfs(1, 1, 0);printf("CASE %d#\npoints : %d\n", ++case, sum);printf("circuit : ");for (int i = 0; i <= len - 2; i++) printf("%d->", ans[i]);printf("%d\n", ans[len - 1] - n);if (t > 0) printf("\n");}
}

PS:另一个思路,本题如果用DP解决,则是定义一个二维数组,每一行存储走一步的所有可能结果,下一行基于上一行多走一步推出递推公式。

HDU 1224 DFS相关推荐

  1. hdu 4751(dfs染色)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4751 思路:构建新图,对于那些两点连双向边的,忽略,然后其余的都连双向边,于是在新图中,连边的点是能不 ...

  2. hdu 3560(dfs判环)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3560 思路:dfs判环,这里成环的条件是环中的每个点的出度和入度都为1,因此dfs的时候只须判断的相连 ...

  3. HDU 2212 DFS (伪·DFS)

    链接 : http://acm.hdu.edu.cn/showproblem.php?pid=2212 本来是想练下DFS的,结果被题目标题坑了(HDU也搞标题党?),更坑的是题还这么水 直接输出四个 ...

  4. hdu 1175 DFS连连看

    题意:中文题就不说了. 思路:DFS,关键是那个转折大于两次就不行的情况怎么深搜,可以枚举递归起始点的四个方向,如果在DFS中的方向K和递归中的不一样而且还满足深搜条件,那么转折次数就加一. 这道题W ...

  5. poj 1564 Sum It Up | zoj 1711 | hdu 1548 (dfs + 剪枝 or 判重)

    Sum It Up Time Limit : 2000/1000ms (Java/Other)   Memory Limit : 65536/32768K (Java/Other) Total Sub ...

  6. hdu 5188 dfs+二分

    get了很多新技能 当时想到了用dfs,但是排序用的是限制时间排序,一直没搞出来. 正解: 二分用时,dfs判断,为了顺利进行做题,需要按照做题开始时间排序 还可以用dp 题意: 作为史上最强的刷子之 ...

  7. HDU 3699 DFS

    A hard Aoshu Problem Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 62768/32768 K (Java/Oth ...

  8. HDU - Reversi(dfs+水题)

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

  9. hdu 1760 DFS+博弈

    0代表可放 1带表不能放 每次放一个2*2的方块 不能放者败 如果先手必胜则输出Yes 必胜态:从当前状态所能到达的状态中存在一个必败态 必败态:从当前状态所能达到的状态全部是必胜态 Sample I ...

  10. hdu 1518 dfs+剪枝

    题目大意: 几根棒子能否组成一个正方形 Sample Input 3           //测试组数 4 1 1 1 1   //棒子数目以及每根棒子的长度 5 10 20 30 40 50 8 1 ...

最新文章

  1. 如何搭建mysql的学习环境_Mysql学习笔记【一、环境安装配置】
  2. http request header 中的host行的作用
  3. 1371. Find the Longest Substring Containing Vowels in Even Counts
  4. 设计模式的征途—2.简单工厂(Simple Factory)模式
  5. LCA求解的四种模板
  6. php滚动公告源码,好用的滚动公告HTML代码
  7. mysql 迁移到tidb_通过从MySQL迁移到TiDB来水平扩展Hive Metastore数据库
  8. java数组中相同的元素个数_java求两个数组中相同元素出现的次数
  9. Kubernetes弹性伸缩全场景解读(五) - 定时伸缩组件发布与开源
  10. iconfont字体图标的使用方法
  11. python—datatable加载数据
  12. 记得收藏这12个爆款 Java 开源项目!【附源码】
  13. Android性能全面分析与优化方案研究—几乎是史上最全最实用的
  14. ToStringBuilder学习总结
  15. android httpclient版本,android版本存在 httpclient leak
  16. 易班学生安全上报系统脚本
  17. java 米与厘米 转换_米转码换算(米与码的换算关系)
  18. matlab gmm,GMM聚类及Matlab代码实现
  19. # responses[name] = response
  20. Spring IOC介绍

热门文章

  1. Linux介绍及安装过程 常用的命令 对目录或文件的增删改查 压缩和解压缩 用户和权限 shell/shellScript linux的一些其他命令
  2. 阅读小结:NIC模型
  3. Java学习指南(15) 链表
  4. 特征选择 | MATLAB实现NCA(近邻成分分析)特征选择
  5. 命令与征服4 You might have build the wrong LOD level 错误
  6. rust发射台主楼_各专业分类词库(完全).doc
  7. Solver Prototxt - 参数说明
  8. `算法竞赛题解` LCP 03. 机器人大冒险
  9. BJTU1935 铁憨憨骑士团的购买装备
  10. 疫情之下,企业如何突围?