背包DP【bzoj2287】: 【POJ Challenge】消失之物
2024-09-08 14:08:09
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;
}
最新文章
- 【2016-11-11】【坚持学习】【Day24】【WPF 自定义控件 附加属性 自定义事件】
- SQL操作记录查看工具
- Apache Server Status主机状态查看
- JAVA里面的IO流(一)分类2(节点流和处理流及构造方法概要)
- Innodb Read IO 相关参数源代码解析
- freebsd 禁用root登录ssh并给普通用户登录权限
- asp.net 认证与授权
- 第十篇、让UIScrollView的滚动条常显
- Linux和Windows下的进程管理总结
- Unity 的“Vertex Lit Rendering path“中 shader Pass 的注意事项
- 如何调试delphi的Access violation at address错误
- [虚拟化/云][全栈demo] 为qemu增加一个PCI的watchdog外设(八)
- BeanUtils属性
- Jenkins Kubernetes Slave 调度效率优化小记
- c/c++ 多线程 等待一次性事件 packaged_task用法
- java的基础语法(标识符 修饰符 关键字)
- 在Java中如何高效的判断数组中是否包含某个元素
- mongodb并列查询,模糊查询
- Unity动画知识之二:Animator动画状态机
- POJ 1129
热门文章
- mq_学习_00_资源帖
- Java钉钉开发_02_免登授权(身份验证)
- codeforces 655D D. Robot Rapping Results Report(拓扑排序+拓扑序记录)
- Java进阶06 容器
- 【C/C++】assert
- [转]JS内存泄漏排查方法(Chrome Profiles)
- JS之事件监听
- BZOJ1720:[Usaco2006 Jan]Corral the Cows 奶牛围栏
- 问题11:如何进行反向迭代 &; 如何实现反向迭代
- 【原】spring jar 下载