問題 C 神奇的口袋

2021-10-05 01:13:48 字數 2068 閱讀 2074

問題 c: 神奇的口袋

[命題人 : 外部匯入]

時間限制 : 1.000 sec 記憶體限制 : 32 mb

解決: 1034提交: 2292統計

題目描述

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

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

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

樣例輸入 copy212

2832110

5樣例輸出 copy10

首先,這道題是口袋問題,即是一種組合問題,組合問題區別於排列問題,在於遞推式是不斷往下,即這個遞推式往下推,而且這個index的終結點,是數而不是位置,所以也要進行邊界判斷。並且說明index最大只可能為n+1,所以不用擔心其他問題,還有一點就是,組合的方式它不再是填數,所以它可以肆無忌憚地拿東西,記得在結束之前判斷是否滿足了條件即可。。。。。

#include

#include

#include

#include

#include

using

namespace std;

int a[22]

=;int n;

int total =40;

int countt =0;

intgenerate

(int index)

//如果本次的位置 之前已經把40湊足,不用再繼續遞迴了

if(total==0)

//區別於搜尋的是,每次遞迴了就肯定拿了,所以沒必要放if邊界判斷裡面

if(index == n +1)

return0;

///別再犯錯了!!!

//可以看成也是一種搜尋,,,for裡面多個岔口!!!!

for(

int ii = index; ii <= n; ii++)}

intmain()

generate(1

);printf

("%d\n"

,countt);}

return0;

}

下面再介紹一種直接搜尋的辦法,,其實搜尋比較容易理解,,,並且也模擬了拿與不拿的結果值,不用手工的加與減,這樣的話,結果判斷就容易許多,而且不用擔心拿太多,total容量不夠放,所以一直搜尋就行,搜尋的本義即是拿與不拿,,,,不斷增加各種組合,它也是一種不會回退的方式,一直拿,不會重複拿,即一種組合的方式。至此思維導圖聯絡起來,做題要麼選排列,要麼選組合,組合分為兩種,一種是用for模擬附帶操作,一種是直接搜尋。

#include

#include

#include

#include

#include

using

namespace std;

int a[22]

;int n;

int total =40;

int countt =0;

intgenerate

(int index,

int sum)

if(index == n +1)

generate

(index+

1,sum+a[index]);

//對位置的遞迴,不斷拿數 下乙個數

generate

(index+

1,sum)

;//對位置的遞迴,不斷拿數 下乙個數

}int

main()

generate(1

,0);

printf

("%d\n"

,countt);}

return0;

}

問題 C 神奇的口袋

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

問題 C 神奇的口袋

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

問題 C 神奇的口袋

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