首页 > 其他分享 >回退背包专题

回退背包专题

时间:2024-06-06 12:28:55浏览次数:24  
标签:10 背包 int 物品 专题 回退 dp

P4141 消失之物

题目意思,就是说有n个物品,然后每个物品都有自己的体积w[i],然后问你,如果第i个物品丢了之后,还能够装满这个背包的方法,然后遍历一遍i同时也要遍历一遍背包,因为背包的值是在1到m之间的任意值,对于同一个物品丢失,中间结果不需要用加空格隔开,就是连在一起

题解:

这是一个回退背包问题

首先第一步,我们把正常的背包(就是正常情况下装满容积为x的背包的物品的情况的数量)求出来,然后就是板子,求出填满当中体积有多少种方法

第二步就是回退,

回退的关键问题有两个

  1. 回退的点该怎么找
  2. 只把由当前物品组成的情况删除

解决这两个问题就是会了回退

两个关键点分两步解决

  1. 当前背包容量小于我需要回退的物品时,说明我当前压根没有带走该物体,所以当前的刚好填满的方法数量还是不变

  2. 当我背包容量大于等于我需要回退的物品时,说明我当前正好可以填满的方法中有部分方法是由本该退回的物品组成的,至少为1(因为当前背包容量等于当前物品体积的时候,这是肯定为一种情况的

这里对f[j]=(dp[j]-f[j-w[i]]+10)%10;解释一下

原方法总数-由退回物品组成的方法总数
为什么f[j-w[i]]是退回物品的方法总数呢?
因为w[i]与j-w[i]才能恰好组成j也就是当前背包容量,一件w[i]与n件j-w[i]可以恰好组成n种方法
还有个问题,其实我一开始在思考这里回退j-a[i]的时候会不会把之前已经回退过的二次回退导致答案变小呢
事实是不会的,完全多想
因为每次只考虑一个物品所以不搭边,因为这里的关系是关联关系,j-a[i]的方法总数是影响a[i]的方法总数,所以这边就算收到影响也是因为j-a[i]受到了影响,那么j-a[i]受到影响这个方法总数肯定是会受到影响的。

#include<bits/stdc++.h>
using namespace std;
#define int long long
int n,m;
int w[2005];
int dp[2005];//填满容量为j的背包的方案总数 ,dp表示原来n件物品的背包
int f[2005];//f表示拿掉第i件的背包恰好填满的情况 
signed main()
{
	cin>>n>>m;
	for(int i=1;i<=n;i++)
	cin>>w[i];
	dp[0]=1;
	
	//01背包
	for(int i=1;i<=n;i++)
	{
		for(int j=m;j>=w[i];j--)
		{
			dp[j]=(dp[j]+dp[j-w[i]])%10;
		}
	} 
	
	for(int i=1;i<=n;i++)
	{
		f[0]=1;
		for(int j=1;j<=m;j++)
		{
			if(w[i]>j)
			f[j]=dp[j]%10;
			else
			f[j]=(dp[j]-f[j-w[i]]+10)%10;
			cout<<f[j];
		}
		cout<<"\n";
	}
	return 0;
}

标签:10,背包,int,物品,专题,回退,dp
From: https://blog.csdn.net/2301_80475191/article/details/139400148

相关文章

  • 【专题】2024客户端游戏市场营销发展报告合集PDF分享(附原数据表)
    原文链接:https://tecdat.cn/?p=36402原文出处:拓端数据部落公众号报告合集显示,中国客户端游戏市场在2023年创新高,达到662.83亿元,表明精品化和跨端生态趋势对市场的推动作用。报告合集强调客户端游戏的独特优势,如精品内容、视听体验和操作反馈等,促进了市场稳定增长。客户端游戏生......
  • 【专题】2022-2023中国跨境出口B2C电商报告PDF合集分享(附原数据表)
    报告链接:http://tecdat.cn/?p=32805原文出处:拓端数据部落公众号全球疫情的爆发对于全球经济和消费市场都带来了很大的冲击,特别是在消费者的消费行为和零售市场格局方面发生了重大变革。同时由于全球供应链的重新调整,产业分化现象也加速出现。阅读原文,获取专题报告合集全文,解锁文......
  • “安全生产月”专题报道:AI智能监控技术如何助力安全生产
    今年6月是第23个全国“安全生产月”,6月16日为全国“安全宣传咨询日”。今年全国“安全生产月”活动主题为“人人讲安全、个个会应急——畅通生命通道”。近日,国务院安委会办公室、应急管理部对开展好2024年全国“安全生产月”活动作出安排部署。随着科技的不断发展,视频智能监控系......
  • 代码随想录算法训练营第四十六天|动态规划:完全背包理论基础、518.零钱兑换II、377. 组
    动态规划:完全背包理论基础文档讲解:代码随想录题目链接:52.携带研究材料(第七期模拟笔试)完全背包有N件物品和一个最多能背重量为W的背包。第i件物品的重量是weight[i],得到的价值是value[i]。每件物品都有无限个(也就是可以放入背包多次),求解将哪些物品装入背包里物品价值总......
  • 代码随想录算法训练营第四十九天| 139.单词拆分、多重背包
    139.单词拆分文档讲解:代码随想录题目链接:.-力扣(LeetCode)第一想法: 非空字符串s:背包非空单词的列表wordDict:物品每个物品可以使用多次,是一个完全背包问题看到这道题目的时候,大家应该回想起我们之前讲解回溯法专题的时候,讲过的一道题目回溯算法:分割回文串 (opens......
  • 背包 dp 学习笔记
    背包类问题是动态规划中的一类重要问题1.01背包有\(n\)件物品和一个容量为\(v\)的背包。第\(i\)件物品的费用是\(c_i\),价值是\(w_i\)。求解将哪些物品装入背包可使价值总和最大。1.1基本思路我们首先定义此问题的dp状态\(f_{i,j}\)表示前\(i\)件物品放入一个......
  • 退背包简介 / NOI模拟 卖画
    退背包介绍之前居然完全没了解过“退背包”,其实是个很易于接受的思路,看了下最简单的板子题居然是个黄题,离谱。退背包的原理在于根据题意与状态设计,阶段顺序并不影响最终的答案,因此之前某个阶段的贡献是可以撤销的。具体撤销的方法就是通过原先从\(f_{i-1}\)转移到\(f_i\)的......
  • 背包九讲 完全背包
    https://www.acwing.com/problem/content/3/有N种物品和一个容量是V的背包,每种物品都有无限件可用。第i种物品的体积是vi,价值是wi。求解将哪些物品装入背包,可使这些物品的总体积不超过背包容量,且总价值最大。输出最大价值。输入格式第一行两个整数,N,V,用空格隔开,分别......
  • FPGA复位专题---(42)复位信号高扇出?
     (42)复位信号高扇出?1目录(a)FPGA简介(b)Verilog简介(c)复位简介(d)复位信号高扇出?(e)结束1FPGA简介(a)FPGA(FieldProgrammableGateArray)是在PAL(可编程阵列逻辑)、GAL(通用阵列逻辑)等可编程器件的基础上进一步发展的产物。它是作为专用集成电路(ASIC)领域中的一种半定制电路而出现......
  • 6.2 休息日 背包问题总结
    就目前所遇到的01背包与完全背包作总结。01背包有n件物品和一个最多能背重量为w的背包。第i件物品的重量是weight[i],得到的价值是value[i]。每件物品只能用一次,求解将哪些物品装入背包里物品价值总和最大。二维dp数组01背包动规五部曲1.确定dp数组以及下标的含义dp[i......