bzoj2287:[POJ Challenge]消失之物
Posted DUXT
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了bzoj2287:[POJ Challenge]消失之物相关的知识,希望对你有一定的参考价值。
思路:首先先背包预处理出f[x]表示所有物品背出体积为x的方案数。然后统计答案,利用dp。
C[i][j]表示不用物品i,组成体积j的方案数。
转移公式:C[i][j]=f[j]-C[i][j-w[i]]
#include<iostream> #include<cstdio> #include<cstring> #include<algorithm> #include<cmath> using namespace std; #define maxn 2005 int n,m; int f[maxn],w[maxn],ans[maxn]; int main(){ scanf("%d%d",&n,&m); for (int i=1;i<=n;i++) scanf("%d",&w[i]);f[0]=1; 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++){ memset(ans,0,sizeof(ans)),ans[0]=1; for (int j=1;j<=m;j++){ if (j>=w[i]) ans[j]=((f[j]-ans[j-w[i]])%10+10)%10; else ans[j]=f[j]; printf("%d",ans[j]); } puts(""); } return 0; }
以上是关于bzoj2287:[POJ Challenge]消失之物的主要内容,如果未能解决你的问题,请参考以下文章
bzoj2287POJ Challenge消失之物(dp+补集转化,好题)