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 的背包,有几种方法呢?” ...
随机推荐
- [转帖]Linux的缓存内存(cache memory)
PS:为什么Linux系统没运行多少程序,显示的可用内存这么少?其实Linux与Win的内存管理不同,会尽量缓存内存以提高读写性能,通常叫做Cache Memory. 为什么Linux系统没运行多少程 ...
- OpenOffice的简单安装
1. OpenOffice的下载 http://www.openoffice.org/download/ 没有找到arm和龙芯版本的 可能需要二进制编译方式安装, 暂时还没学习处理. 2. 将下载好的 ...
- 情侣纪念日网站html5源码教程
个人名片: 对人间的热爱与歌颂,可抵岁月冗长 Github:念舒_C.ying CSDN主页️:念舒_C.ying 个人博客 :念舒_C.ying 预览图 直接进入我的网站吧 >> Z_ ...
- Python中局部放大图案例
例子一: 先上完整代码和效果图: import numpy as np import matplotlib.pyplot as plt from mpl_toolkits.axes_grid1.ins ...
- 【2】VScode 搭建python和tensorflow环境
相关文章: [一]tensorflow安装.常用python镜像源.tensorflow 深度学习强化学习教学 [二]tensorflow调试报错.tensorflow 深度学习强化学习教学 [三]t ...
- 4.5 Windows驱动开发:内核中实现进程数据转储
多数ARK反内核工具中都存在驱动级别的内存转存功能,该功能可以将应用层中运行进程的内存镜像转存到特定目录下,内存转存功能在应对加壳程序的分析尤为重要,当进程在内存中解码后,我们可以很容易的将内存镜像导 ...
- 8.9 RDTSC时钟检测反调试
RDTSC时钟检测同样可实现反调试检测,使用时钟检测方法是利用rdtsc汇编指令,它返回至系统重新启动以来的时钟数,并且将其作为一个64位的值存入EDX:EAX寄存器中,通过运行两次rdstc指令,然 ...
- 由刷题学习 heapq
今日一题是 面试题 17.14. 最小K个数 https://leetcode-cn.com/problems/smallest-k-lcci/ 还好 提示 0 <= len(arr) < ...
- VB6的Office颜色菜单 - 开源研究系列文章
今天把VB6里面的源码开源了( VB6各类源码开源 - 开源研究系列文章 ),这次把原来VB6里面的一个菜单控件进行介绍,需要的网友请下载安装: 1.看使用截图: 运行时截图: 设计时截图: 2.Of ...
- XPath从入门到精通:基础和高级用法完整指南,附美团APP匹配示例
XPath 通常用来进行网站.XML (APP )和数据挖掘,通过元素和属性的方式来获取指定的节点,然后抓取需要的信息. 学习 XPath 语法之前,首先了解一下一些概念. 概念介绍 节点之间的关系 ...