給定n個正整數a1,a2,…,an,從中選出若干個數,使它們的和為m,求有多少種選擇方案。
輸入格式
第一行包含兩個整數n和m。
第二行包含n個整數,表示a1,a2,…,an。
輸出格式
包含乙個整數,表示可選方案數。
資料範圍
1≤n≤100
,1≤m≤10000
,1≤ai≤1000
輸入樣例:44
1122
輸出樣例:
3
#include
using
namespace std;
typedef
long
long ll;
const
int n=
110,m=
10010
;ll f[n]
[m];
int a[n]
;int
main()
for(
int i=
1;i<=n;i++
)for
(int i=
1;i<=n;i++)}
cout<[m];
return0;
}
//一維優化
#include
using namespace std;
typedef
long
long ll;
const
int n=
110,m=
10010
;int f[m]
;int
main()
} cout<;return0;
}
數字組合(01揹包)
小蒜有n 1 n 20 個正整數,找出其中和為t t 也是正整數 的可能的組合方式。如 n 5,5 個數分別為 1,2,3,4,5 t 5 那麼可能的組合有 5 1 4 5 1 4 和 5 2 3 和 5 5三種組合方式。輸入格式 輸入的第一行是兩個正整數 n 和 t,用空格隔開,其中1 n 20,...
數字組合(01揹包)
就是01揹包小小變形一下就不太會做了。思路 當前和的方案數等於當前和減當前和當去當前正數的方案數,如 當前正數為2,和為5的方案數就等於3 5 2 的方案數,和為3的方案數又等於1 3 2 的方案數。又因為在每一種方案中每個數字只能使用一次,所以採用01揹包。狀態轉移方程式 dp j dp j w ...
數字組合(01揹包問題求方案數)
給定n個正整數a1,a2,an,從中選出若干個數,使它們的和為m,求有多少種選擇方案。輸入格式 第一行包含兩個整數n和m。第二行包含n個整數,表示a1,a2,an。輸出格式 包含乙個整數,表示可選方案數。資料範圍 1 n 100,1 m 10000,1 ai 1000 輸入樣例 4 4 1 1 2 ...