题意:
解法:
令d[i][j][k]表示前i个物品,选j个,总和为k的方案数,
背包dp出来,最后答案为sum(d[n][i][i*A]).
第一维可以滚动优化掉.
code:
#include <bits/stdc++.h>
#define int long long
using namespace std;
const int maxm=1e6+5;
int d[55][55*55];
int a[maxm];
int n,A;
void solve(){
cin>>n>>A;
for(int i=1;i<=n;i++){
cin>>a[i];
}
d[0][0]=1;
for(int i=1;i<=n;i++){
for(int j=i;j>=1;j--){
for(int k=n*A;k>=a[i];k--){
d[j][k]+=d[j-1][k-a[i]];
}
}
}
int ans=0;
for(int i=1;i<=n;i++){
ans+=d[i][i*A];
}
cout<<ans<<endl;
}
signed main(){
ios::sync_with_stdio(0);cin.tie(0);
solve();
return 0;
}