問題描述:二叉蘋果樹
題目描述
有一棵蘋果樹,如果樹枝有分叉,一定是分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 ...