IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> 每日一题——传递信息(动态规划) -> 正文阅读

[数据结构与算法]每日一题——传递信息(动态规划)

学习目标:

每天睡前是否感到浑浑噩噩,一天又在不知不觉中过去,回想我今天都干了什么呢?

啊~我这一天又什么也没干,好有罪恶感啊,不行,我明天一定要好好学算法(手动狗头)。

明日复明日,明日何其多?不要等明天啦,和小编一起,每天睡前一道算法题,不仅解决你一天的空虚,更能助你安心入眠,远离熬夜。还能学到一点算法知识。不要小看这些知识哦,不积跬步无以至千里,不积小流无以成江海。每位大佬都不是一夜成名,都是从小白做起,日积月累,终成大佬,和小编一起,每日一题,走向大佬之路吧!


学习内容:

我们的题基本都是一些较为基础,适合日(睡)常(前)看的题,不会让你一眼就看出答案,是稍稍一点脚就能摸到头绪,但是在想的过程中又一时不知如何实现,再一想,又柳暗花明,最终跟着小编的思路一起解决问题,有不同思路可以发在评论区,一起讨论。“你若在,我必回”。


?我们今天的内容,主要是回顾动态规划和一道简单的例题。

动态规划的思想主要是空间换时间,通过数组记录我们之前的数据,从而减少重复的计算量,俗称“记忆”。动态规划的基本步骤我们在之前的文章里有过介绍,忘记的小伙伴可以点击下方链接回顾一下。

动态规划基本步骤icon-default.png?t=M1FBhttps://blog.csdn.net/Cooler_z/article/details/122461999?spm=1001.2014.3001.5502


接下来让我们看下今天的题目:?

小朋友 A 在和 ta 的小伙伴们玩传信息游戏,游戏规则如下:

有 n 名玩家,所有玩家编号分别为 0 ~ n-1,其中小朋友 A 的编号为 0
每个玩家都有固定的若干个可传信息的其他玩家(也可能没有)。传信息的关系是单向的(比如 A 可以向 B 传信息,但 B 不能向 A 传信息)。
每轮信息必须需要传递给另一个人,且信息可重复经过同一个人
给定总玩家数 n,以及按 [玩家编号,对应可传递玩家编号] 关系组成的二维数组 relation。返回信息从小 A (编号 0 ) 经过 k 轮传递到编号为 n-1 的小伙伴处的方案数;若不能到达,返回 0。

示例 1:

输入:n = 5, relation = [[0,2],[2,1],[3,4],[2,3],[1,4],[2,0],[0,4]], k = 3

输出:3

解释:信息从小 A 编号 0 处开始,经 3 轮传递,到达编号 4。共有 3 种方案,分别是 0->2->0->4, 0->2->1->4, 0->2->3->4。

示例 2:

输入:n = 3, relation = [[0,2],[2,1]], k = 2

输出:0

解释:信息不能从小 A 处经过 2 轮传递到编号 2

限制:

2 <= n <= 10
1 <= k <= 5
1 <= relation.length <= 90, 且 relation[i].length == 2
0 <= relation[i][0],relation[i][1] < n 且 relation[i][0] != relation[i][1]

题目的主要内容就是信息从第0个人经过k轮传递 到第n-1个人上总共有多少种传递方式。而传递的原则就是题目给定的relation数组,信息只能通过relation[i][0]->relation[i][1]。并在每一轮规则均相同,但和我们的常识有所不同的是:我们认为信息传递后,传递者和被传递者都知道了信息。但在此题却不同,这个信息更像是一件物品,传递完就在被传递者身上。这是我们需要注意的。

接下来就是根据我们的模板去写程序。首先是dp数组的元素含义,我们最终要得到的是第k轮第n-1个人获得信息有多少种途径。那么经过思考,我们可以定义一个dp[k][n]的二维数组,表示第k轮第n个人有多少种获取信息的途径。

接下来是元素间的关系。如果在第i-1轮的第relation[j][0]的人得到信息的方式不为0,那么在第i轮的第relation[j][1]的人得到信息的方式+dp[i-1][relation[j][0]]。代码表述:

for(i=1;i<k;i++){
            for(j=0;j<l;j++){
                if(dp[i-1][relation[j][0]]!=0){
                    dp[i][relation[j][1]]+=dp[i-1][relation[j][0]];
                }
            }
        }

最后是数组初始化。也就是第1轮信息的初始点只要第0个人,所以只要判断关系种哪个relation[i][0]==0,然后relation[i][1]=1。直接看我们的最终代码:

class Solution {
public:
    int numWays(int n, vector<vector<int>>& relation, int k) {
        int ans=0,i,j,x,y,l=relation.size();
        vector<vector<int>> dp(k,vector<int>(n,0));
        for(i=0;i<l;i++){
            if(relation[i][0]==0) dp[0][relation[i][1]]=1;
        }
        for(i=1;i<k;i++){
            for(j=0;j<l;j++){
                if(dp[i-1][relation[j][0]]!=0){
                    dp[i][relation[j][1]]+=dp[i-1][relation[j][0]];
                }
            }
        }
        return dp[k-1][n-1];
    }
};

?还有一个小知识点就是vector二位数组的定义与初始化。

定义一个m行n列的二维数组

vector<vector<int>> dp(m,vector<int>(n));

若要对其初始复制为常数c。只需在n后+c。

vector<vector<int>> dp(m,vector<int>(n,c));

??

以上就是我们这道题的全部内容。顺便说一下前几天没更新的原因,确实是有一点懒了==。也很感谢有小伙伴催更提醒我,在这里谢过了!!!也希望大家多多提醒我,共同进步。

每天坚持是一件很累的事,即使很慢,但也不要停止。


大家记得点赞收藏,防止找不到哦。

欢迎大家订阅小编的每日一题专栏,会每天更新,都是用心准备的哦!

若有不同思路,欢迎评论区留言,看到必回,Goodnight!

  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2022-02-16 13:22:22  更:2022-02-16 13:23:17 
 
开发: 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 17:26:01-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码