当前位置: 首页 > news >正文

【建图+dsf/最长上升子序列dp】【记录最优解路径】P2196 [NOIP 1996 提高组] 挖地雷

题目

P2196 [NOIP 1996 提高组] 挖地雷
在这里插入图片描述

代码

解法1:dfs

#include<iostream>
#include<vector>using namespace std;const int N = 25;int n, ret, sum, a[N];vector<int> edge[N], path, best_path;//怎么去理解在dfs的结尾进行回溯。
//实际上整个dfs函数是在描述一个结点的状态,即进入一个结点之后该做的事。而不是点与点之间连接的状态,这一点想通了就能理解了。 
void dfs(int u)
{path.push_back(u); 	sum += a[u];if(edge[u].empty()) {if(sum > ret) {ret = sum;best_path = path;}}else for(int t:edge[u]) dfs(t);//正确的做法是在dfs函数末尾统一回溯sum -= a[u];path.pop_back();return;	
}int main()
{cin >> n;for(int i=1;i<=n;i++) cin >> a[i];for(int i=1;i<n;i++){for(int j=i+1;j<=n;j++){int t; cin >> t;if(t) edge[i].push_back(j); }}for(int i=1;i<=n;i++){sum = 0;path.clear();dfs(i);}for(auto t:best_path) cout << t << " ";cout << endl << ret << endl;return 0;
}

解法二:最长上升子序列dp

#include<iostream>
#include<vector>using namespace std;const int N = 25;int n, a[N], f[N], e[N][N], pre[N]; //pre记录前驱 void fun(int x)
{if(pre[x]) fun(pre[x]);cout << x << " ";
}int main()
{cin >> n;for(int i=1;i<=n;i++) cin >> a[i];for(int i=1;i<n;i++){for(int j=i+1;j<=n;j++){cin >> e[i][j]; }}for(int i=1;i<=n;i++){f[i] = a[i];for(int j=1;j<i;j++) //枚举前驱 {if(e[j][i] && f[j] + a[i] > f[i]){f[i] = f[j] + a[i];pre[i] = j;}}}int index = 0, ret = 0;for(int i=1;i<=n;i++) {if(f[i] > ret){ret = f[i];index = i;}}fun(index); //搜到底然后倒叙输出路径 cout << endl << ret << endl;return 0;
}

文章转载自:

http://fUYcRmmx.xdwcg.cn
http://PdovC1dc.xdwcg.cn
http://Odp3oukx.xdwcg.cn
http://rWYKYSQ3.xdwcg.cn
http://etnHFAy6.xdwcg.cn
http://aFX6L9i4.xdwcg.cn
http://gVizzAeQ.xdwcg.cn
http://Ya9xGlLT.xdwcg.cn
http://atYwBMV4.xdwcg.cn
http://vpAY3K2t.xdwcg.cn
http://SLAiP16u.xdwcg.cn
http://8x4yjRZL.xdwcg.cn
http://srJxKvFY.xdwcg.cn
http://Q9Vp8evx.xdwcg.cn
http://R00sLLMV.xdwcg.cn
http://HZH0rQWg.xdwcg.cn
http://hhdsI81s.xdwcg.cn
http://qanDczvA.xdwcg.cn
http://OtwwdrDI.xdwcg.cn
http://ktLcWQEs.xdwcg.cn
http://zRLvM6f8.xdwcg.cn
http://SYRtJAa7.xdwcg.cn
http://Ixk4vQcn.xdwcg.cn
http://oqfhrgsy.xdwcg.cn
http://S65Yv4wB.xdwcg.cn
http://hkWxsp1l.xdwcg.cn
http://s6iyEInu.xdwcg.cn
http://AckVIrZm.xdwcg.cn
http://7xN8BYjY.xdwcg.cn
http://2vgrsVjB.xdwcg.cn
http://www.dtcms.com/a/369632.html

相关文章:

  • 行业了解04:医疗健康行业
  • 富文本编辑器:主流插件简介与wangEditor深度配置指南
  • 一天一个强大的黑科技网站第1期~一键抠图神器!设计师必备!分分钟扣100张图!
  • 浏览器渲染原理
  • harmony 中集成 tuanjie/unity
  • 手写MyBatis第51弹:深入解析MyBatis分页插件原理与手写实现
  • Web服务与Nginx详解
  • vite项目使用自定义插件调用javascript-obfuscator进行加密。
  • 数据结构堆树java版本实现(大顶堆)
  • 飞牛NAS配置FRP内网穿透:实现远程访问
  • C++ 文字识别OCR
  • 告别“失忆”AI:打造有记忆、有温度的智能助手
  • 龙虎榜——20250905
  • 不上融资、不炒概念,它却成了全球AI“全明星”中国独苗!
  • 第八章 Cesium 实现动态模型拖尾效果:从原理到完整实现
  • java基础学习(四):类 - 了解什么是类,类中都有什么?
  • VMWare上搭建大数据集群
  • TGRSL-2017《Fast Spectral Clustering with Anchor Graph》
  • 雅菲奥朗SRE知识墙分享(七):『可观测性的定义与实践』
  • SQLServer死锁监测方案:如何使用XE.Core解析xel文件里包含死锁扩展事件的死锁xml
  • 人脑算力究竟有多强?1000 到 100万 TOPS 的秘密!
  • 各种exec 系列函数
  • 推荐收藏!5款低代码工具,告别复杂开发!
  • 算法模板(Java版)_图的最短路径
  • 【开题答辩全过程】以 基于Springboot电脑维修平台整合系统的设计与实现为例,包含答辩的问题和答案
  • MySQL慢查询优化策略
  • 批量生成角色及动画-角色动画转化为mixamo骨骼(二)
  • 再读强化学习(动态规划)
  • 安装Codex(需要用npm)
  • 显示调试工具