Code Up 4 3問題 C 神奇的口袋

2021-09-26 19:40:57 字數 1020 閱讀 5630

有乙個神奇的口袋,總的容積是40,用這個口袋可以變出一些物品,這些物品的總體積必須是40。john現在有n個想要得到的物品,每個物品的體積分別是a1,a2……an。john可以從這些物品中選擇一些,如果選出的物體的總體積是40,那麼利用這個神奇的口袋,john就可以得到這些物品。現在的問題是,john有多少種不同的選擇物品的方式。

輸入的第一行是正整數n (1 <= n <= 20),表示不同的物品的數目。接下來的n行,每行有乙個1到40之間的正整數,分別給出a1,a2……an的值。

輸出不同的選擇物品的方式的數目。

2

1228321

105

1

0

我們把輸入的體積數存入陣列,利用陣列下標表示每乙個物品的體積(從1開始,表示是第乙個物品,將體積存放在對應陣列中)

我們從最後乙個往前取可以分為兩個情況:

1.不取最後乙個,取前面的就可以湊成40;

2.取最後乙個,那麼我們接著取前面的話就要將體積湊成40減去我們已經取得的物品的體積.

兩者相加就是取法的總數.

我們將遞迴函式定義成 int f(int a,int w)    a表示前面還有a個物品,w表示我們需要湊成的體積總數。

那麼這兩種情況就可以表示成(假設用bag陣列儲存每個物品的體積)

1. f(a-1,b)        2.f(a-1,w-bag[a])  。

而遞迴的邊界就是 當b==0,也就是我們前面取到的物品已經湊到了b,所以不需要再繼續取物品去湊體積的時候,表示我們已經湊成了一種情況,返回1。

當a<=0時,也就是前面已經沒有東西可取了的時候,表示我們湊不成目標體積b了,返回0。

#include int bag[22];

int f(int a,int w)//從 前a個物品中選出體積總和為w的物品

int main()

int count=f(n,40);

printf("%d\n",count);

} return 0;

}

codeup 問題 C 神奇的口袋

題目描述 有乙個神奇的口袋,總的容積是40,用這個口袋可以變出一些物品,這些物品的總體積必須是40。john現在有n個想要得到的物品,每個物品的體積分別是a1,a2 an。john可以從這些物品中選擇一些,如果選出的物體的總體積是40,那麼利用這個神奇的口袋,john就可以得到這些物品。現在的問題是...

codeup 神奇的口袋 C

題目描述 有乙個神奇的口袋,總的容積是40,用這個口袋可以變出一些物品,這些物品的總體積必須是40。john現在有n個想要得到的物品,每個物品的體積分別是a1,a2 an。john可以從這些物品中選擇一些,如果選出的物體的總體積是40,那麼利用這個神奇的口袋,john就可以得到這些物品。現在的問題是...

問題 C 神奇的口袋

題目描述 有乙個神奇的口袋,總的容積是40,用這個口袋可以變出一些物品,這些物品的總體積必須是40。john現在有n個想要得到的物品,每個物品的體積分別是a1,a2 an。john可以從這些物品中選擇一些,如果選出的物體的總體積是40,那麼利用這個神奇的口袋,john就可以得到這些物品。現在的問題是...