[Luogu4141] 消失之物 [01背包]

[ L i n k \frak{Link} Link]

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值