| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 数据结构与算法 -> 洛谷P2196 挖地雷 题解 超详细(DP&&DFS) -> 正文阅读 |
|
[数据结构与算法]洛谷P2196 挖地雷 题解 超详细(DP&&DFS) |
这道题我读时想到两种方法,分别是dp和搜索,于是将两种方法奉上 一.dp这道题的被放在题单“”dp的引入”,所以我们就先用dp思考 dp需要考虑数组,转移方程 1.数组毫无疑问,这类dp的题都是用一维数组 这道题自然逃不出一维的手掌心 so我们可以用数组dp[i]储存以i为终点的最大地雷数 然后从2进行顺推即可 2.转移方程我们可以借鉴最长子序列
由于是单向边,结合输入方式,可知对于点i,只有1到i-1可能存在到点i的路径 用num[i]储存第i个点的地雷数 所以对于dp[i],枚举从j=i-1到j=1 if存在路径并且dp[j]+num[i]>dp[i] 将dp[i]赋值为dp[j]+num[i] 代码实现:
所以状态转移方程可总结为: 3.代码不多说废话了,放出代码,我写了题解,应该能看懂:
二.搜索由于这道题的数据很水,我们可以直接用搜索来暴力求解 由于是单向边,我的思路是定义一个数组来标记每一个点是否走过 在进行搜索的时候如果不进行标记,会进入死循环 那么搜索时是否有可走的边(有没有被标记过的点&&有联通的边)就很有必要
路径需要两个数组,一个直接保存答案路径,另一个保存搜索时的路径 如果搜索结果大于当前最大值时,将该路径赋值给结果路径 直接上代码,我写了很详细的注释,应该不难理解:
希望能给你提供一些帮助 |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/26 7:18:51- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |