有乙個神奇的口袋,總的容積是40,用這個口袋可以變出一些物品,這些物品的總體積必須是40。john現在有n個想要得到的物品,每個物品的體積分別是a 1,a 2……a n。john可以從這些物品中選擇一些,如果選出的物體的總體積是40,那麼利用這個神奇的口袋,john就可以得到這些物品。現在的問題是,john有多少種不同的選擇物品的方式。
輸入的第一行是正整數n (1 <= n <= 20),表示不同的物品的數目。接下來的n行,每行有乙個1到40之間的正整數,分別給出a 1,a 2……a n的值。
輸出不同的選擇物品的方式的數目。
32020
20
3題意很清楚,就是求可以湊成40的所有方案。可以用回溯,dp也可以用遞迴來做,遞迴相比簡單點
遞迴**:
#include#includeusing namespace std;
int a[30];int n;
int ways(int w,int k)
int main()
return 0;
}
dp**:
#include using namespace std;
#define max 50
int dp[max][max];
int a[max];
int n;
int main()
} cout《回溯法**:
#include using namespace std;
int a[20],tot=0;
void ss(int sum,int m,int n)
}int main()
百練 2755 神奇的口袋
描述 有乙個神奇的口袋,總的容積是40,用這個口袋可以變出一些物品,這些物品的總體積必須是40。john現在有n個想要得到的物品,每個物品的體積分別是a 1,a2 a n。john可以從這些物品中選擇一些,如果選出的物體的總體積是40,那麼利用這個神奇的口袋,john就可以得到這些物品。現在的問題是...
百練 2755 神奇的口袋
遞迴 include include include includeusing namespace std const int maxn 30 int n,d maxn int dp int w,int n int main 人人為我動歸 狀態定義 揹包容量為i時,選完前j件物品後,能達到該容量的最...
百練 2755 神奇的口袋
第一種解法是很經典的動態規劃,對於值域較小的題目,還可以採用第二種方法,考慮對值域空間 即對容積的可達性進行動態規劃。這道題裡面採用第二種解法還會有空間上的優化。有時把值域作為一種狀態不單單是一種解法,還有可能是唯一的解法。如hdu 1574 rp問題 描述有乙個神奇的口袋,總的容積是40,用這個口...