2287: 【POJ Challenge】消失之物

Description

ftiasch 有 N 个物品, 体积分别是 W1, W2, ..., WN。 由于她的疏忽, 第 i 个物品丢失了。 “要使用剩下的 N - 1 物品装满容积为 x 的背包,有几种方法呢?” -- 这是经典的问题了。她把答案记为 Count(i, x) ,想要得到所有1 <= i <= N, 1 <= x <= M的 Count(i, x) 表格。

Input

第1行:两个整数 N (1 ≤ N ≤ 2 × 103) 和 M (1 ≤ M ≤ 2 × 103),物品的数量和最大的容积。

第2行: N 个整数 W1, W2, ..., WN, 物品的体积。

Output

一个 N × M 的矩阵, Count(i, x)的末位数字。

暴力背包?不存在的。

看数据要\(n^2\)做。

首先应该处理出在n个物品的范围内装满某个体积的方案数。

转移:

\[(f[j]+=f[j-w[i]])%=mod;
\]

再设\(count[i][j]\)表示不选第i个物品,装j体积的方案数。

分情况讨论:

\[if(!j)count(i)(j)=1;
\]

\[if(j<=w[i])count(i)(j)=f(j)
\]

\[if(j>w[i])count(i)(j)=f(j)-count(i)(j-w[i])
\]

第三个方程是在当前体积大于w[i]的时候,不装i的方案数。

转移思路就是不选i物品的方案数=全集-选i物品的方案数。

\(count(i)(j-w[i])\)比较难理解,意思是在不选i的前提下装了\(j-w(i)\)的体积,然后选择i这个物品凑够j的体积。

code:

#include<iostream>
#include<cstdio>
using namespace std;
const int wx=2017;
inline int read(){
int sum=0,f=1;char ch=getchar();
while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
while(ch>='0'&&ch<='9'){sum=(sum<<1)+(sum<<3)+ch-'0';ch=getchar();}
return sum*f;
}
int n,m;
int f[wx],w[wx];
int c[wx][wx];
int main(){
n=read();m=read();
f[0]=1;
for(int i=1;i<=n;i++)w[i]=read();
for(int i=1;i<=n;i++){
for(int j=m;j>=w[i];j--){
(f[j]+=f[j-w[i]])%=10;
}
}
for(int i=1;i<=n;i++){
for(int j=0;j<=m;j++){
if(!j)c[i][j]=1;
else if(j<w[i]){
c[i][j]=(f[j]+10)%10;printf("%d",c[i][j]);
}
else {
c[i][j]=(f[j]-c[i][j-w[i]]+10)%10;printf("%d",c[i][j]);
}
}puts("");
}
return 0;
}

最新文章

  1. 【2016-11-11】【坚持学习】【Day24】【WPF 自定义控件 附加属性 自定义事件】
  2. SQL操作记录查看工具
  3. Apache Server Status主机状态查看
  4. JAVA里面的IO流(一)分类2(节点流和处理流及构造方法概要)
  5. Innodb Read IO 相关参数源代码解析
  6. freebsd 禁用root登录ssh并给普通用户登录权限
  7. asp.net 认证与授权
  8. 第十篇、让UIScrollView的滚动条常显
  9. Linux和Windows下的进程管理总结
  10. Unity 的“Vertex Lit Rendering path“中 shader Pass 的注意事项
  11. 如何调试delphi的Access violation at address错误
  12. [虚拟化/云][全栈demo] 为qemu增加一个PCI的watchdog外设(八)
  13. BeanUtils属性
  14. Jenkins Kubernetes Slave 调度效率优化小记
  15. c/c++ 多线程 等待一次性事件 packaged_task用法
  16. java的基础语法(标识符 修饰符 关键字)
  17. 在Java中如何高效的判断数组中是否包含某个元素
  18. mongodb并列查询,模糊查询
  19. Unity动画知识之二:Animator动画状态机
  20. POJ 1129

热门文章

  1. mq_学习_00_资源帖
  2. Java钉钉开发_02_免登授权(身份验证)
  3. codeforces 655D D. Robot Rapping Results Report(拓扑排序+拓扑序记录)
  4. Java进阶06 容器
  5. 【C/C++】assert
  6. [转]JS内存泄漏排查方法(Chrome Profiles)
  7. JS之事件监听
  8. BZOJ1720:[Usaco2006 Jan]Corral the Cows 奶牛围栏
  9. 问题11:如何进行反向迭代 &amp; 如何实现反向迭代
  10. 【原】spring jar 下载