藍橋杯訓練 動態規劃 蘋果二叉樹

2021-08-09 14:51:11 字數 1708 閱讀 8689

問題描述:二叉蘋果樹

題目描述

有一棵蘋果樹,如果樹枝有分叉,一定是分2叉(就是說沒有只有1個兒子的結點)

這棵樹共有n個結點(葉子點或者樹枝分叉點),編號為1-n,樹根編號一定是1。

我們用一根樹枝兩端連線的結點的編號來描述一根樹枝的位置。下面是一顆有4個樹枝的樹

2 5 \ / 3 4 \ / 1 現在這顆樹枝條太多了,需要剪枝。但是一些樹枝上長有蘋果。

給定需要保留的樹枝數量,求出最多能留住多少蘋果。

輸入輸出格式

輸入格式:

第1行2個數,n和q(1<=q<= n,1 < n<=100)。

n表示樹的結點數,q表示要保留的樹枝數量。接下來n-1行描述樹枝的資訊。

每行3個整數,前兩個是它連線的結點的編號。第3個數是這根樹枝上蘋果的數量。

每根樹枝上的蘋果不超過30000個。

輸出格式:

乙個數,最多能留住的蘋果的數量。

輸入輸出樣例

輸入樣例#1:

5 21 3 1

1 4 10

2 3 20

3 5 20

輸出樣例#1:

21思想;深搜,題目中描述有留下的樹枝的數量,便可以使用深搜的方法,順著一條枝條深搜下去,

當深度大於所需留下的枝條數量時便說明不能再搜了(後邊的枝條都得砍掉),再伸搜的過程中實

現了排列組合的最大價值求解

**:

/*

問題描述:二叉蘋果樹

題目描述

有一棵蘋果樹,如果樹枝有分叉,一定是分2叉(就是說沒有只有1個兒子的結點)

這棵樹共有n個結點(葉子點或者樹枝分叉點),編號為1-n,樹根編號一定是1。

我們用一根樹枝兩端連線的結點的編號來描述一根樹枝的位置。下面是一顆有4個樹枝的樹

2 5 \ / 3 4 \ / 1 現在這顆樹枝條太多了,需要剪枝。但是一些樹枝上長有蘋果。

給定需要保留的樹枝數量,求出最多能留住多少蘋果。

輸入輸出格式

輸入格式:

第1行2個數,n和q(1<=q<= n,1 < n<=100)。

n表示樹的結點數,q表示要保留的樹枝數量。接下來n-1行描述樹枝的資訊。

每行3個整數,前兩個是它連線的結點的編號。第3個數是這根樹枝上蘋果的數量。

每根樹枝上的蘋果不超過30000個。

輸出格式:

乙個數,最多能留住的蘋果的數量。

輸入輸出樣例

輸入樣例#1:

5 21 3 1

1 4 10

2 3 20

3 5 20

輸出樣例#1:

21思想;深搜,題目中描述有留下的樹枝的數量,便可以使用深搜的方法,順著一條枝條深搜下去,

當深度大於所需留下的枝條數量時便說明不能再搜了(後邊的枝條都得砍掉),再伸搜的過程中實

現了排列組合的最大價值求解

*/#include #include int father[100];

int n,q;

int max;

int tree[100][100];

int times[100];

typedef struct

branch;

void dfs(int n,int num,int v)

dfs(1,0,0);

printf("%d",max);

return 0;

}

藍橋杯 演算法訓練 FBI樹(二叉樹)

演算法訓練 fbi樹 時間限制 1.0s 記憶體限制 256.0mb 問題描述 我們可以把由 0 和 1 組成的字串分為三類 全 0 串稱為b串,全 1 串稱為i串,既含 0 又含 1 的串則稱為f串。fbi樹是一種二叉樹,它的結點型別也包括f結點,b結點和i結點三種。由乙個長度為2 n的 01 串...

藍橋杯 顯示二叉樹

排序二叉樹的特徵是 某個節點的左子樹的所有節點值都不大於本節點值。某個節點的右子樹的所有節點值都不小於本節點值。為了能形象地觀察二叉樹的建立過程,小明寫了一段程式來顯示出二叉樹的結構來。include include define n 1000 define height 100 define wi...

藍橋杯 橫向列印二叉樹

讀入一棵二叉搜尋樹並橫向列印 樣例10 8 5 7 12 4 樣例輸出 列印的 其實是子節點和祖先節點的連線,如果在搜尋種能記錄節點自身一行最末尾的 使其子節點能夠列印與祖先節點的連線,就可以列印成樹,但子節點不是和所有祖先節點都有連線的,子節點和直接父親節點一定有連線。在例子中,搜尋過程 8 5 ...