2022.3.5(2)

 

 

 

 

#include<cstdio>
#include<algorithm>
using namespace std;
int w[2010],dp1[2010],dp2[2010];
int n,m;
int main()
{
int i,j;
scanf("%d%d",&n,&m);
for(i=1;i<=n;i++)
scanf("%d",&w[i]);
dp1[0]=dp2[0]=1;//方案数目问题的前提,背包空间为0时的装满方案有1种。
for(i=1;i<=n;i++)
{
for(j=m;j>=w[i];j--)
{
dp1[j]=(dp1[j]+dp1[j-w[i]])%10;//装满背包的方案数问题的状态转移方程。
}
}
for(i=1;i<=n;i++)
{
for(j=1;j<=m;j++)
{
if(w[i]>j)
dp2[j]=dp1[j]%10;
else
dp2[j]=(dp1[j]-dp2[j-w[i]]+100)%10;//容量为j时丢物品i的方案数=容量为j时不丢物品的方案数目-容量为j-i的体积时丢i的方案数目。
printf("%d",dp2[j]);//上一行加100是为了防止负数,+10也一样。
}
printf("\n");
}
return 0;
}

posted @ 2022-03-05 14:40  noname5588  阅读(37)  评论(0)    收藏  举报