t
i
p
s
.
\frak{tips.}
tips.分治不是必要的。
f
f
t
\frak{fft}
fft也不是必要的。
其实很好想,做01背包的逆过程就可以还原了。
注意看题,要模。
#include<cstdio>
#include<algorithm>
using namespace std;
int N,M;
int F[2005]={};
int T[2005]={};
int W[2005]={};
int main()
{
F[0]=1; scanf("%d%d",&N,&M);
for(int i=1;i<=N;++i) scanf("%d",&W[i]);
for(int i=1;i<=N;++i) for(int j=M;j>=W[i];--j) F[j]+=F[j-W[i]],F[j]%=10;
for(int i=1;i<=N;++i)
{
for(int j=0;j<=M;++j) T[j]=F[j];
for(int j=W[i];j<=M;++j) T[j]=(T[j]-T[j-W[i]]+10)%10;
for(int j=1;j<=M;++j) printf("%d",T[j]);
putchar('\n');
}
return 0;
}
FFT和分治的做法可以看洛谷题解emmmm