A 幼兒數學 三叉樹結構 DFS深搜題解

2021-10-25 15:18:22 字數 1255 閱讀 9471

problem description

給你乙個只包含數字[0,9]的字串。

你可以在字元之間加上』 + 『或』 - ',使得字串成為乙個帶加減法的式子。

例如對於「12345」,你可以將他變成"123+4-5」。

現在給你乙個整數n,計算有多少種方法可以使式子的結果等於n。

你只能在兩個相鄰字元中選擇最多乙個符號。

input

多組資料,每組資料給出數字串s和乙個整數n,( |s|<=12,|n|<1e12)

output

輸出有多少種方法,可以使式子的結果等於n

sample input

123456789 3

21 1

sample output

18

1

神tm幼兒數學 首先看sample,分析結果是如何得來的:(版面空間有限,只列舉前三層)

對於每兩個數之間的空隙,我們可以細分為:①填』+』 ②填』-』 ③不填,於是我們可以畫圖:

我們不難發現:尋找答案的過程即為遍歷一棵深度為n的三叉樹,在樹的頂端計數其符合要求的節點。顯然,採用dfs解決本問題的比較合適的。

由於對於每個葉子反覆運算的開銷是不必要的,而且在樹結構中符合要求的情況最終都會在樹頂不重不漏的體現出來,因此我們在向樹頂搜尋的過程中只需逐步計算即可

ac code 如下:

#include

#define ll long long

using

namespace std;

char s[

100]

;ll n;

int len, ans;

void

dfs(ll sum, ll num,

int pos,

int op)

dfs(sum, num *

10+ s[pos]

-'0'

, pos +

1, op)

;//無符號

dfs(sum + num * op, s[pos]

-'0'

, pos +1,

1);//加號

dfs(sum + num * op, s[pos]

-'0'

, pos +1,

-1);

//減號

}int

main()

return0;

}

三叉搜尋樹

三叉搜尋樹是用來解決字典樹的記憶體問題的資料結構。為了避免不需要的節點的記憶體占用,每個字典樹節點不再使用陣列,而是使用 樹中有樹 的結構。在三叉搜尋樹中,字典樹節點的每個非空指標得到它自己。例如,有四個單詞,ab abba abcd和bcd,它的三叉搜尋樹結構如下 三叉搜尋樹包括三種箭頭。第一種,...

三叉戟網路

今天為大家介紹一篇圖森科技在iccv 2019的目標檢測 scale aware trident networks for object detection 簡稱tridentnet,中文翻譯為三叉戟網路。位址見附錄。我們知道在目標檢測任務中,尺度變化一直是很關鍵的問題。針對尺度變化問題,也有很多的...

求三叉樹高度

有12345個結點的滿3叉數的高度為 寫出計算過程 1 層 1 節點數 1 2 3 4 層 2 節點數 3 5 6 7 8 9 10 11 12 13 層 3 節點數 9 滿三叉樹每層節點數目 假設k 1層有n個節點 那麼第k層就應該有3n個節點。也就是說這是乙個首項是1,公比是3的等比數列。第n層...