某地區(qū)發(fā)生了地震,災(zāi)區(qū)已經(jīng)非常困難,災(zāi)民急需一些帳篷、衣物、食品和血漿等物資??赏ㄍ鶠?zāi)區(qū)的道路到處都是塌方,70%以上的路面損壞,橋梁全部被毀。國家立即啟動應(yīng)急預(yù)案,展開史上最大強(qiáng)度非作戰(zhàn)空運(yùn)行動,準(zhǔn)備向?yàn)?zāi)區(qū)空投急需物資。
一方有難,八方支援。現(xiàn)在已知有N個地方分別有A1,A2,….,An個物資可供調(diào)配。目前災(zāi)區(qū)需要物資數(shù)量為M。
現(xiàn)在,請你幫忙算一算,總共有多少種物質(zhì)調(diào)度方案。
假設(shè)某地方一旦被選擇調(diào)配,則其物資數(shù)全部運(yùn)走。
輸入輸入一個組數(shù)T。(0<T<10)之后為N,M含義分別如題目描述。(0<N<=100,0<M<=1000)之后有N個數(shù)字A1,A2,….,An表示N個地方每個地方的物資數(shù)。(0<Ai<=1000)輸出對于每組測試數(shù)據(jù),輸出一行:物資調(diào)度的總方案數(shù)樣例輸入24 41 1 2 24 61 1 2 2樣例輸出31#include <stdio.h>#include <string.h>int a[10000];int dp[100000];int main(){ int t; scanf("%d",&t); while(t--) { int n,m; memset(dp,0,sizeof(dp)); scanf("%d %d",&n,&m); for(int i=0;i<n;i++) scanf("%d",&a[i]); dp[0]=1; for(int i=0;i<n;i++) for(int j=m;j>=a[i];j--) if(dp[j-a[i]]!=0)//如果(j-a[i])個物資存在方案 dp[j]+=dp[j-a[i]];//那么j個物資的方案數(shù)可以加上j-a[i]個物資的方案數(shù) PRintf("%d/n",dp[m]); } return 0;}
新聞熱點(diǎn)
疑難解答