AC:
#include <cstdio>
#include <cstring>
#include <algorithm>
const int N = 2e3 + 5;
int n, m, v[N];
int f[N], g[N];
int main() {
scanf("%d %d", &n, &m);
register int i, j;
for (i = 1; i <= n; i++)
scanf("%d", &v[i]);
f[0] = g[0] = 1;
for (i = 1; i <= n; i++)
for (j = m; j >= v[i]; j--) {
f[j] += f[j - v[i]];
f[j] %= 10;
}
for (i = 1; i <= n; i++) {
for (j = 1; j <= m; j++) {
if (j - v[i] >= 0)
g[j] = (f[j] - g[j - v[i]] + 10) % 10;
else
g[j] = f[j] % 10;
printf("%d", g[j]);
}
printf("\n");
}
return 0;
}
20:
#include <cstdio>
#include <cstring>
#include <algorithm>
const int N = 2e3 + 5;
int n, m, v[N];
int f[N], g[N];
int main() {
scanf("%d %d", &n, &m);
register int i, j;
for (i = 1; i <= n; i++)
scanf("%d", &v[i]);
f[0] = 1, g[0] = 1;
for (i = 1; i <= n; i++)
for (j = m; j >= v[i]; j--) {
f[j] += f[j - v[i]];
f[j] %= 10;
}
for (i = 1; i <= n; i++) {
for (j = 1; j < v[i]; j++) {
g[j] = f[j] % 10;
printf("%d", g[j]);
}
for (j = v[i]; j <= m; j++) {
g[j] = (f[j] - g[j - v[i]] + 10) % 10;
printf("%d", g[j]);
}
printf("\n");
}
return 0;
}