有乙個神奇的口袋,總的容積是40,用這個口袋可以變出一些物品,這些物品的總體積必須是40。john現在有n個想要得到的物品,每個物品的體積分別是a1,a2……an。john可以從這些物品中選擇一些,如果選出的物體的總體積是40,那麼利用這個神奇的口袋,john就可以得到這些物品。現在的問題是,john有多少種不同的選擇物品的方式。
輸入的第一行是正整數n (1 <= n <= 20),表示不同的物品的數目。接下來的n行,每行有乙個1到40之間的正整數,分別給出a1,a2……an的值。
輸出不同的選擇物品的方式的數目。
示例13
2020
20
#include
#include
using
namespace std;
//使用遞迴的方法
int a[
100]
;int n;
intcount
(int i,
int sum)
//sum一開始對應的是口袋體積40,sum=0代表了通過減去物體體積使得口袋剛好裝滿
if(sum<
0||i==n)
//sum<0說明了通過減法無法使條件滿足,而i=n則代表了已經將物品全部裝完但是還是沒有符合條件
return
count
(i+1
,sum-a[i])+
count
(i+1
,sum)
;//通過這個式子獲得所有物品的組合
}int
main()
cout<<
count(0
,40)<}return0;
}
牛客網 《考研複試機試》 字尾子串排序
對於乙個字串,將其字尾子串進行排序,例如grain 其子串有 grain rain ain in n 然後對各子串按字典順序排序,即 ain,grain,in,n,rain 每個案例為一行字串。將子串排序輸出 示例1grain aingraininn rain cin.get cin.getline...
牛客網考研復試題 棋盤遊戲
有乙個6 6的棋盤,每個棋盤上都有乙個數值,現在又乙個起始位置和終止位置,請找出乙個從起始位置到終止位置代價最小的路徑 1 只能沿上下左右四個方向移動 2 總代價是沒走一步的代價之和 3 每步 從a,b到c,d 的代價是c,d上的值與其在a,b上的狀態的乘積 4 初始狀態為1 每走一步,狀態按如下公...
清華大學考研複試機試 今年的第幾天
輸入年 月 日,計算該天是本年的第幾天。包括三個整數年 1 y 3000 月 1 m 12 日 1 d 31 輸入可能有多組測試資料,對於每一組測試資料,輸出乙個整數,代表input中的年 月 日對應本年的第幾天。水題,注意閏年和每個月的天數即可,可以使用乙個全域性陣列來記錄每個月的天數,如果是閏年...