1757 神奇的口袋(2 7基本演算法之演算法效率)

2021-08-05 20:49:15 字數 858 閱讀 3533

總時間限制: 10000ms 記憶體限制: 65536kb

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

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

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

樣例輸入

3 20

20 20

樣例輸出

3就是個簡單的動態規劃,設定dp[i][j]是前i個物品裝在容積為j的口袋裡的方式總和,注意初始化的時候分兩種情況,乙個是a[i]==j的時候,dp[i][j]=1+dp[i-1][j],其他時候就dp[i][j]=dp[i-1][j]。

#include 

using

namespace

std;

////我特麼也是服氣自己的,想的方法一直都是對的

//然而又錯在dp區間開少了!!!注意區間範圍啊親

int n,a[21],dp[21][41]=;//前i個物品裝在容積為j的口袋裡的方式總和

int e;

void f()

dp[i][a[i]]+=1;

for(int j=a[i];j<=40;j++)

}cout

<40]

演算法筆記 神奇的口袋

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

(演算法練習) 神奇的口袋

要求 這一題充分讓我覺得我只能寫簡單的遞迴 實際這個也不難,但我想的不是這樣的,就 寫不出來 需要好好找找一些遞迴的 實現來看看 參考大神的 寫的,也理解了 但為啥自己就想不到呢?include include int count,n,sum int record 21 void search in...

神奇的口袋

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