LeetCode LCP 01 傳遞資訊

2021-10-05 05:36:14 字數 1798 閱讀 9741

問題描述

小朋友 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]

問題分析:

dfs:將孩子們的傳遞的關係圖畫出來,可知只是乙個關於圖的問題,問題轉換為從圖中的節點0經過k個節點到達節點n-1。因此也就是乙個搜尋問題,因此使用dfs進行搜尋。再次轉換,也就是在一棵樹中進行搜尋,深度不大於k且此時的節點應該為n-1.

動態規劃:計數型dp

1.確定狀態:

最後一步:在到達n-1之前,前一步一定在0…n-2之間

子問題:走k-1步能夠到達0…n-2中任意乙個的方法數,他們的和就是總數量

定義狀態dp[k][n]為走k-1步到達n-1的方法數量

2.定義狀態轉移方程

dp[k][n]=sum(dp[k-1][0]+dp[k-1][1]+…+dp[k-1][n-2]+dp[k-1][n-1])

3.初始值和邊界條件

初始值:dp[0][0]=1,走0步到達0節點的方法為1

邊界條件:k,n

4.優化

偽**:

int dfs()

for(

int i=

0;i++i)

dfs(relation,relationsize,n,k-

1,dst[i]);

return ans;

}int

numways

(int n,

int*

*relation,

int relationsize,

int*relationcolsize,

int k)

//dp

intnumways

(int n,

int*

*relation,

int relationsize,

int*relationcolsize,

int k)

元件間傳遞資訊

父元件到子元件通訊 1 prop 父子元件 父子通訊中最常見的資料傳遞方式就是通過props傳遞資料,就好像方法的傳參一樣,父元件呼叫子元件並傳入資料,子元件接受到父元件傳遞的資料進行驗證使用 props 可以是陣列或物件,用於接收來自父元件的資料。props 可以是簡單的陣列,或者使用物件作為替代...

iframe父子傳遞資訊

1.子向父通訊 parent.html window.addeventlistener message function e child.html window.parent.postmessage 2.父向子通訊 parent.html var myframe document.getelemen...

C 視窗傳遞資訊

方法1 在form1中通過postmessage傳送訊息,在form2通過defwndproc截獲訊息來相互作用,具體參見我先前的文章 c 收發和處理自定義的windows訊息 方法2通過第三方 公共類的公共靜態成員來實現 class class1 在form1中賦值class1.str 傳入的內容...