bzoj 2287: 【POJ Challenge】消失之物 生成函数+背包
来源:互联网 发布:grace评分软件中文版 编辑:程序博客网 时间:2024/05/29 10:14
题意
ftiasch 有 N 个物品, 体积分别是 W1, W2, …, WN。 由于她的疏忽, 第 i 个物品丢失了。 “要使用剩下的 N - 1 物品装满容积为 x 的背包,有几种方法呢?” – 这是经典的问题了。她把答案记为 Count(i, x) ,想要得到所有1 <= i <= N, 1 <= x <= M的 Count(i, x) 表格。
n<=2000,m<=2000
分析
一开始想的是求出前缀背包和后缀背包,然后每次合并两个背包。这样的话复杂度就是O(n^3),显然过不了。
我们可以考虑背包的生成函数,
我们可以先把
代码
#include<iostream>#include<cstdio>#include<cstdlib>#include<cstring>#include<algorithm>using namespace std;const int N=2005;int n,m,a[N],f[N],tmp[N];int main(){ scanf("%d%d",&n,&m); for (int i=1;i<=n;i++) scanf("%d",&a[i]); f[0]=1; for (int i=1;i<=n;i++) for (int j=m;j>=a[i];j--) (f[j]+=f[j-a[i]])%=10; for (int i=1;i<=n;i++) { for (int j=0;j<=m;j++) tmp[j]=f[j]; for (int j=a[i];j<=m;j++) (tmp[j]-=tmp[j-a[i]])%=10; for (int j=1;j<=m;j++) printf("%d",(tmp[j]+10)%10); puts(""); } return 0;}
阅读全文
0 0
- bzoj 2287: 【POJ Challenge】消失之物 生成函数+背包
- BZOJ 2287 POJ Challenge 消失之物 分治+背包
- BZOJ 2287: 【POJ Challenge】消失之物 背包dp
- BZOJ 2287【POJ Challenge】消失之物 背包DP
- bzoj 2287 【POJ Challenge】消失之物 背包动规
- BZOJ 2287: 【POJ Challenge】消失之物
- [BZOJ 2287][POJ Challenge]消失之物
- BZOJ 2287 【POJ Challenge】消失之物
- BZOJ 2287: 【POJ Challenge】消失之物
- [bzoj2287]【POJ Challenge】消失之物 背包DP
- bzoj2287【POJ Challenge】消失之物 背包dp
- 【BZOJ2287】【POJ Challenge】消失之物(DP,背包)
- 2287: [POJ Challenge]消失之物 DP
- bzoj2287【POJ Challenge】消失之物
- 【bzoj2287】【POJ Challenge】消失之物
- BZOJ2287: 【POJ Challenge】消失之物
- bzoj2287【POJ Challenge】消失之物
- BZOJ2287 [POJ Challenge]消失之物
- HDU 6170 / 多校1010 Two strings (dp)
- scikit-learn数据预处理fit_transform()与transform()的区别(转)
- Linux--sed
- jQuery-JS常用表单验证&35个jQuery小技巧
- 泛型程序设计
- bzoj 2287: 【POJ Challenge】消失之物 生成函数+背包
- javascript中的时间版运动
- HDU 2795 Billboard (线段树+贪心)
- 【C#】get和set详解
- Java零碎知识
- 产品新人必知的需求优先级确定方法详解
- 阿里热修复之Sophix
- 线程池的原理及实现
- 分布式系统理论基础