32 lines
871 B
C++
32 lines
871 B
C++
//AC
|
|
#include <ios>
|
|
#include <iostream>
|
|
using namespace std;
|
|
|
|
const int MAX_N=2e3+5;
|
|
int n,m;
|
|
int w[MAX_N];
|
|
int dp[MAX_N],g[MAX_N];
|
|
|
|
int main(){
|
|
ios::sync_with_stdio(false),cin.tie(0),cout.tie(0);
|
|
cin>>n>>m;
|
|
for(int i=1;i<=n;i++){
|
|
cin>>w[i];
|
|
}
|
|
dp[0]=1;//背包容量为0也是一种选择方案
|
|
for(int i=1;i<=n;i++){
|
|
for(int j=m;j>=w[i];j--){
|
|
dp[j]=(dp[j]+dp[j-w[i]])%10;
|
|
}
|
|
}
|
|
for(int i=1;i<=n;i++){
|
|
g[0]=1;//背包容量为0也是一种选择方案
|
|
for(int j=1;j<=m;j++){
|
|
if(j<w[i])g[j]=dp[j]%10;
|
|
else g[j]=(dp[j]-g[j-w[i]]+10)%10;//不使用物品i把j容量填满的方案数 = 把j容量填满的方案总数 - (假设使用i个物品时的方案数=容量为j-w[i]时不使用i个物品的总数)
|
|
cout<<g[j];
|
|
}
|
|
cout<<endl;
|
|
}
|
|
} |