DP容斥
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#define maxn 2010
using namespace std;
int n, m;
int w[maxn];
int a[maxn][maxn];
int f[maxn][maxn];
int main(){
scanf("%d%d", &n, &m);
for(int i = 1; i <= n; i ++)
scanf("%d", &w[i]);
f[0][0] = 1;
for(int i = 1; i <= n; i ++){
for(int j = 0; j <= m; j ++)
f[i][j] = f[i-1][j];
for(int j = m; j >= w[i]; j --){
f[i][j] += f[i-1][j-w[i]];
f[i][j] %= 10;
}
}
for(int i = 1; i <= n; i ++){
a[i][0] = 1;
for(int j = 1; j <= m; j ++){
if(j >= w[i])
a[i][j] = (f[n][j] - a[i][j-w[i]] + 10) % 10;
else a[i][j] = f[n][j];
printf("%d", a[i][j]);
}printf("\n");
}
return 0;
}