P4141 消失之物题解(写给每一位与我一样的新手玩家)
消失之物
传送门:
P4141 消失之物 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)
思路
暴力稳了
但是
hack
tle了
这时候我们要想办法优化
这是一个回退背包问题
首先第一步,我们把正常的背包(n间物体)求出来,然后就是板子,求出填满当中体积有多少种方法
第二步就是回退,
回退的关键问题有两个:
- 回退的点该怎么找
- 只把由当前物品组成的情况删除
解决这两个问题就是会了回退,会了回退就是解决问题了
这两个关键点分两步解决:
当前背包容量小于我需要回退的物品时,说明我当前压根没有带走该物体,所以当前的刚好填满的方法数量还是不变
当我背包容量大于等于我需要回退的物品时,说明我当前正好可以填满的方法中有部分方法是由本该退回的物品组成的,至少为1(因为当前背包容量等于当前物品体积的时候,这是肯定为一种情况的)
第二点用以下代码解决
f[j]=(dp[j]-f[j-a[i]]+10)%10;//dp表示原来n件物品的背包,f表示拿掉第i件的背包恰好填满的情况
//原方法总数-由退回物品组成的方法总数
//为什么f[j-a[i]]是退回物品的方法总数呢?
//因为a[i]与j-a[i]才能恰好组成j也就是当前背包容量,一件a[i]与n件j-a[i]可以恰好组成n种方法
//还有个问题,其实我一开始在思考这里回退j-a[i]的时候会不会把之前已经回退过的二次回退导致答案变小呢
//事实是不会的,完全多想
//因为每次只考虑一个物品所以不搭嘎,因为这里的关系是关联关系,j-a[i]的方法总数是影响a[i]的方法总数,所以这边就算收到影响也是因为j-a[i]受到了影响,那么j-a[i]受到影响这个方法总数肯定是会受到影响的。
//这里有点绕,有兴趣可以思考一下后半句,初学者只要牢记前半句就行;
tips:这里的mod 10在每次计算的时候就可以做了,建议求出来的时候先+10再取模,有情况下是看你去负的。
上面的问题都是本人自己写题思考看题解学习,写给每一位跟我一样新入门的同学看!
有问题请评论或私信我,谢谢!
AC code
// Problem:
// P4141 消失之物
//
// Contest: Luogu
// URL: https://www.luogu.com.cn/problem/P4141
// Memory Limit: 256 MB
// Time Limit: 1000 ms
//
// Powered by CP Editor (https://cpeditor.org)
#include<iostream>
#include<algorithm>
//#include<cstdio>
#include<cstring>
#define ll long long
#define endl '\n'
#define rep(i,a,b) for(int i=(a);i<=(b);i++)
#define per(i,a,b) for(int i=(a);i>=(b);i--)
#define N 2100 //1e6+100
using namespace std;
int n,m,a[N],dp[N],f[N];
int main(){
//ios::sync_with_stdio(false),cin.tie(0),cout.tie(0);
cin>>n>>m;
rep(i,1,n) cin>>a[i];
dp[0]=1;
rep(i,1,n){
per(j,m,a[i]){
dp[j]+=dp[j-a[i]];
dp[j]%=10;
}
}
rep(i,1,n){
f[0]=1;
rep(j,1,m){
if(j<a[i])f[j]=dp[j]%10;
else f[j]=(dp[j]-f[j-a[i]]+10)%10;
cout<<f[j];
}
cout<<endl;
}
return 0;
}
P4141 消失之物题解(写给每一位与我一样的新手玩家)的更多相关文章
- 洛谷P4141 消失之物 题解 背包问题扩展
题目链接:https://www.luogu.com.cn/problem/P4141 题目大意: 有 \(n\) 件物品,求第 \(i\) 件物品不能选的时候(\(i\) 从 \(1\) 到 \(n ...
- P4141 消失之物
目录 链接 思路 代码 链接 P4141 消失之物 思路 f[N];//表示删掉物品后能出现容积为i的方案数 a[N];//单纯0-1背包的方案数asd 那么就先求出a[i]来,然后转移就是 if(j ...
- [BZOJ 2287/POJ openjudge1009/Luogu P4141] 消失之物
题面: 传送门:http://poj.openjudge.cn/practice/1009/ Solution DP+DP 首先,我们可以很轻松地求出所有物品都要的情况下的选择方案数,一个简单的满背包 ...
- [bzoj2287]消失之物 题解(背包dp)
2287: [POJ Challenge]消失之物 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 1138 Solved: 654[Submit][ ...
- 洛谷P4141 消失之物——背包
题目:https://www.luogu.org/problemnew/show/P4141 竟然是容斥:不选 i 物品只需减去选了 i 物品的方案: 范围原来是2*10^3而不是2*103啊... ...
- 洛谷P4141消失之物(背包经典题)——Chemist
题目地址:https://www.luogu.org/problemnew/show/P4141 分析:这题当然可以直接暴力枚举去掉哪一个物品,然后每次暴力跑一遍背包,时间复杂度为O(m*n^2),显 ...
- Luogu P4141 消失之物 背包 分治
题意:给出$n$个物品的体积和最大背包容量$m$,求去掉一个物品$i$后,装满体积为$w\in [1,m]$背包的方案数. 有 N 个物品, 体积分别是 W1, W2, …, WN. 由于她的疏忽, ...
- luogu p4141 消失之物(背包dp+容斥原理)
题目传送门 昨天晚上学长讲了这题,说是什么线段树分治,然后觉得不可做,但那还不是正解,然后感觉好像好难的样子. 由于什么鬼畜的分治不会好打,然后想了一下$O(nm)$的做法,想了好长时间觉得这题好像很 ...
- [洛谷P4141] 消失之物「背包DP」
暴力:暴力枚举少了哪个,下面套一个01背包 f[i][j]表示到了i物品,用了j容量的背包时的方案数,f[i][j]=f[i-1][j]+f[i-1][j-w[i]]O(n^3) 优化:不考虑消失的, ...
- 洛谷P4141消失之物
题目描述 ftiasch 有 N 个物品, 体积分别是 W1, W2, …, WN. 由于她的疏忽, 第 i 个物品丢失了. “要使用剩下的 N – 1 物品装满容积为 x 的背包,有几种方法呢?” ...
随机推荐
- [转帖]OceanBase实验4:迁移MySQL数据到OceanBase集群
服务器环境 1)12核48G,操作系统为centos 7.9系统,单节点三副本1-1-1集群. 2)源MySQL数据库:与OceanBase同一台服务器,版本为MySQL 5.7. 1.使用 mysq ...
- [转帖]《Linux性能优化实战》笔记(七)—— CPU瓶颈快速分析及性能优化思路
相当于是前面篇章的小结 一. CPU 性能指标 常见指标包括: 平均负载 CPU 使用率(user.iowait.system.软硬中断等) 进程上下文切换(自愿.非自愿) CPU 缓存的命中率 CP ...
- [转帖]Prometheus监控系统存储容量优化攻略,让你的数据安心保存!
云原生监控领域不可撼动,Prometheus 是不是就没缺点?显然不是. 一个软件如果什么问题都想解决,就会导致什么问题都解决不好.所以Prometheus 也存在不足,广受诟病的问题就是 单机存储不 ...
- [转帖]chrome历史版本及重大变化(维基百科)
Google Chrome是Google LLC开发的免费 网络浏览器.开发过程分为不同的"发布渠道",每个发布渠道都在单独的开发阶段进行构建.Chrome提供了4种渠道:稳定版, ...
- [转帖]大模型训练,英伟达Turing、Ampere和Hopper算力分析
https://www.eet-china.com/mp/a219195.html 大 GPU 优势在于通过并行计算实现大量重复性计算.GPGPU即通用GPU,能够帮助 CPU 进行非图形相关程序的运 ...
- [转帖]一个Linux 内核 bug 导致的 TCP连接卡死
https://plantegg.github.io/2022/10/10/Linux%20BUG%E5%86%85%E6%A0%B8%E5%AF%BC%E8%87%B4%E7%9A%84%20TCP ...
- [转帖]如何优雅的使用 Systemd 管理服务
https://zhuanlan.zhihu.com/p/271071439 背景:我们在构建 Kubernetes 容器化平台时,会在节点上部署各种 agent ,虽然容器化当道的今天很多程序可以直 ...
- echarts饼状图不要中间的文字提示
饼状图不要中间的文字提示信息 emphasis: { label: { show: false, //将这个设置为false }, }, 为什么饼状图不要中间的问题提示信息 因为有些时候,在文字很多的 ...
- js解析上传APK文件的详细信息
前端解析APK版本信息 需要安装这个包,可以使用cnpm或者npm npm 安装 app-info-parser ( 命令:npm install app-info-parser) APKInfo为i ...
- MybatisPlus对Mysql数据库关键字作为列名的处理--SQLSyntaxErrorException: You have an error in your SQL syntax;
说明: 在设计数据库时,使用mysql关键字作为列名(比如order用于排序),就会报错:java.sql.SQLSyntaxErrorException: You have an error in ...