P4141 消失之物

by luogu

貌似原先是bzoj 的 T 

一个背包方案 数

 

不选当前物品的方案数 = 总的方案数 - 选当前物品的方案数

 

#include<bits/stdc++.h>

using namespace std;
const int N=2021;

int n,m;
int a[N];

int dp[N],dp_not[N];
//正常填满的方案,不要这个物品的方案 
int main()
{
    ios::sync_with_stdio(false);
    cin>>n>>m;
    for(int i=1;i<=n;i++)
        cin>>a[i];//每个的容量 
    dp[0]=1;//一个都么的方案 
    
    for(int i=1;i<=n;i++)
    {//物品号 
        for(int j=m;j>=a[i];j--)
        {//求方案数:拿和不拿的方案数相加 
            dp[j]=(dp[j]+dp[j-a[i]])%10;
            dp[j]%=10;
            //末尾数字 
        }    
    }
    for(int i=1;i<=n;i++)
    {
        dp_not[0]=1;//一个都没得 
        for(int j=1;j<=m;j++)
        {//空间 
            if(a[i]>j) //装不下,那就计数到不装里面 
            dp_not[j]=dp[j]%10;//%
            else//装的下, 相 -  
            dp_not[j]=(dp[j]-dp_not[j-a[i]]+10)%10;
            //防爆,+10 
            
            cout<<dp_not[j]%10;
        }
        
        cout<<endl;
    }
    
    
    return 0;
}

 

posted @ 2021-07-13 14:38  Hehe_0  阅读(53)  评论(0)    收藏  举报