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; }