动态规划学习(混合背包,有依赖的背包,以及背包思想)

news2024/11/16 20:20:47

 混合背包的定义:

混合背包问题就是混合01背包、完全背包和多重背包,可供选择的物体i可能有一个、或者无数个、或者有限个。
所以,就不要考虑这么多了,直接分这三种情况考虑就行!!

样例:

for(int i=1;i<=n;i++)
	{
        //01背包
		if(p[i]==1)
		{
			for(int j=time;j>=w[i];j--)
			{
				dp[j]=max(dp[j],dp[j-w[i]]+v[i]);
			}
		}

        //完全背包
		if(p[i]==0)
		{
			for(int j=w[i];j<=time;j++)
			{
				dp[j]=max(dp[j],dp[j-w[i]]+v[i]);
			}
		}


        //多重背包
		else
		{
			for(int j=time;j>=0;j--)
			{
				for(int k=0;k<=p[i]&&k*w[i]<=j;k++)
				{
					dp[j]=max(dp[j],dp[j-k*w[i]]+k*v[i]);
				}
			}
		}
	}

P1833 樱花

题意:就是说给我一个时间(背包容量),然后有n种樱花树,每个樱花树有自己的时间(花费)以及美学值(价值),但是每个种类的樱花树,数量是不同的

思路:混合背包问题,当数量为1的时候是01背包,是0的时候是完全背包,其余情况是混合背包,这样就对了吗?当然不是,不用二进制优化就80分,所以我们需要对这种情况进行二进制优化,将多重背包分开为01背包,然后只区分是不是0即可

#include<bits/stdc++.h> 
using namespace std;
string a;
string b;
int n;
int w[10005];
int v[10005];
int p[10005];
int dp[1005];
// 将时间型字符串转换为分钟数
int timeStringToMinutes(std::string timeString) 
{
    int hours, minutes;
    char colon;
    std::stringstream ss(timeString);
    ss >> hours >> colon >> minutes;
    return hours * 60 + minutes;
}
// 计算时间差
int solve(std::string time1, std::string time2) 
{
    int minutes1 = timeStringToMinutes(time1);
    int minutes2 = timeStringToMinutes(time2);
    return minutes2 - minutes1;
}

int main()
{
	cin>>a;
	cin>>b;
	
	int time=0;
	time=solve(a,b);

	cin>>n;
	for(int i=1;i<=n;i++)
	{
		cin>>w[i]>>v[i]>>p[i];
	}
	for(int i=1;i<=n;i++)
	{
		
		if(p[i]==0)
		{
			for(int j=w[i];j<=time;j++)
			{
				dp[j]=max(dp[j],dp[j-w[i]]+v[i]);
			}
		}
		else
		{
			for(int k=1;k<=p[i];k++)
			for(int j=time;j>=w[i];j--)
			{
				dp[j]=max(dp[j],dp[j-w[i]]+v[i]);
			}
		}
	}
	
	cout<<dp[time];
	return 0;
}

有依赖的背包

有依赖的背包问题是一种特殊的背包问题,其中的物品不是完全独立的,而是存在依赖关系

在有依赖的背包问题中,多个物品可以被视为一个复合物品,这些物品之间可能存在互斥关系(即,选择了一个就不能选择另一个)。同时,每个复合物品可能有多种选择方式。例如,一个复合物品可能包括主物品和一些附属物品,你可以选择只带主物品,也可以选择带主物品和一些或全部附属物品,这就产生了多种可能性。在解决这种问题时,需要考虑所有可能的组合,以找到最优解。

P1064 [NOIP2006 提高组] 金明的预算方案

题意:就是说有m种物品,每个物品都有自己的价格重要度,价值是价格乘以重要度,后面的q判断的是是否自己就是主件,或者说这个物品的主件是什么

思路:有依赖的背包的例题,我们可以去用一个数组去存储每个主件的附件有几个,然后进行01背包,找出选择的最大价值

#include<bits/stdc++.h>
using namespace std;
int n,m;
int dp[32005];
int mw[65];
int mv[65];
int fw[65][3];
int fv[65][3];

signed main()
{
	cin>>m>>n;
	int w,p,q;
	for(int i=1;i<=n;i++)
	{
		cin>>w>>p>>q;
		if(q==0)
		{
			mw[i]=w;
			mv[i]=w*p;
		}
		else
		{
			fw[q][0]++;//用于统计第q个主键有几个附件
			fw[q][fw[q][0]]=w;
			fv[q][fw[q][0]]=w*p;
		}
	}
	for(int i=1;i<=n;i++)
	{
		for(int j=m;j>=mw[i];j--)
		{
			dp[j]=max(dp[j],dp[j-mw[i]]+mv[i]);
			
			if(j>=mw[i]+fw[i][1])
			{
				dp[j]=max(dp[j],dp[j-mw[i]-fw[i][1]]+mv[i]+fv[i][1]);
			}
			
			if(j>=mw[i]+fw[i][2])
			{
				dp[j]=max(dp[j],dp[j-mw[i]-fw[i][2]]+mv[i]+fv[i][2]);
			}
			
			if(j>=mw[i]+fw[i][1]+fw[i][2])
			{
				dp[j]=max(dp[j],dp[j-mw[i]-fw[i][1]-fw[i][2]]+mv[i]+fv[i][1]+fv[i][2]);
			}
		}
	}
	cout<<dp[m]; 
	return 0;
}

 背包思想

就是单纯用到了01背包的一种思想,去进行问题的求解

P2904 [USACO08MAR] River Crossing S

思路:就是将 每次运送n个奶牛作为时间作为花费,找出最小的时间(价值)

#include<bits/stdc++.h>
using namespace std;
int n,m;
int t[2505];
int pre[2505];
int dp[10005];
signed main()
{
	cin>>n>>m;
	memset(dp,0x3f3f3f3f,sizeof(dp));
	dp[0]=0;
	for(int i=1;i<=n;i++)
	{
		cin>>t[i];
		pre[i]=pre[i-1]+t[i];
	}
	for(int i=1;i<=n;i++)
	{
		pre[i]+=2*m;
	}
	for(int i=1;i<=n;i++)
	{
		for(int j=i;j<=n;j++)
		{
			dp[j]=min(dp[j],dp[j-i]+pre[i]);
		}
	}
	cout<<dp[n]-m<<"\n";
	return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1800118.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

优化财务管理制度提升企业经营效益—以审计代理记账为例

随着社会经济的快速发展&#xff0c;企业经营规模不断扩大&#xff0c;面临的财务管理问题也日益复杂&#xff0c;而作为其中的重要一环&#xff0c;审计代理记账已经成为了企业的必要组成部分&#xff0c;本文将重点探讨审计代理记账对于优化企业财务管理&#xff0c;提高经营…

【数据结构】图论入门

引入 数据的逻辑结构&#xff1a; 集合&#xff1a;数据元素间除“同属于一个集合”外&#xff0c;无其他关系线性结构&#xff1a;一个对多个&#xff0c;例如&#xff1a;线性表、栈、队列树形结构&#xff1a;一个对多个&#xff0c;例如&#xff1a;树图形结构&#xff1…

Linux 中常用的设置、工具和操作

1.设置固定的ip地址步骤 1.1 添加IPADDR“所设置的固定ip地址” TYPE"Ethernet" PROXY_METHOD"none" BROWSER_ONLY"no" BOOTPROTO"static" DEFROUTE"yes" IPV4_FAILURE_FATAL"no" IPV6INIT"yes" IPV6…

Vue——模板引用(不建议使用,了解)

文章目录 前言测试案例 前言 模板引用&#xff0c;在官方文档中也有很详细的描述。 虽然 Vue 的声明性渲染模型为你抽象了大部分对 DOM 的直接操作&#xff0c;但在某些情况下&#xff0c;我们仍然需要直接访问底层 DOM 元素。 个人理解为&#xff1a; 在vue中&#xff0c;依据…

gcc与g++的原理

程序的翻译 1 快速认识gcc/g2 程序翻译的过程2.1 预处理阶段2.2 编译阶段2.3 汇编阶段2.4 链接阶段 3 动静态库 1 快速认识gcc/g 首先我们需要在linux系统中安装对应的编译器gcc/g&#xff0c;安装命令如下&#xff08;centos7环境下&#xff09;&#xff1a; gcc: yum instal…

【HarmonyOS4学习笔记】《HarmonyOS4+NEXT星河版入门到企业级实战教程》课程学习笔记(十三)

课程地址&#xff1a; 黑马程序员HarmonyOS4NEXT星河版入门到企业级实战教程&#xff0c;一套精通鸿蒙应用开发 &#xff08;本篇笔记对应课程第 20 - 21节&#xff09; P20《19.ArkUI-属性动画和显式动画》 本节先来学习属性动画和显式动画&#xff1a; 在代码中定义动画&am…

Qt开发技术:Q3D图表开发笔记(四):Q3DSurface三维曲面图颜色样式详解、Demo以及代码详解

若该文为原创文章&#xff0c;转载请注明原文出处 本文章博客地址&#xff1a;https://hpzwl.blog.csdn.net/article/details/139424086 各位读者&#xff0c;知识无穷而人力有穷&#xff0c;要么改需求&#xff0c;要么找专业人士&#xff0c;要么自己研究 红胖子网络科技博…

centos安装vscode的教程

centos安装vscode的教程 步骤一&#xff1a;打开vscode官网找到历史版本 历史版本链接 步骤二&#xff1a;找到文件下载的位置 在命令行中输入&#xff08;稍等片刻即可打开&#xff09;&#xff1a; /usr/share/code/bin/code关闭vscode后&#xff0c;可在应用程序----编程…

Matplotlib常见图汇总

Matplotlib是python的一个画图库&#xff0c;便于数据可视化。 安装命令 pip install matplotlib 常用命令&#xff1a; 绘制直线&#xff0c;连接两个点 import matplotlib.pyplot as plt plt.plot([0,5],[2,4]) plt.show() 运行结果如下&#xff1a; 多条线&#xff1a;…

计算机组成实验---Cache的实现

直接映射 先看懂cache的映射原理&#xff0c;根据cache大小与主存大小来计算各个信号线的位数 各个信号线位数 主存地址在逻辑上分为区号、块号、块内地址 Cache结构 Cache访问原理 基本过程 状态机&#xff1a;“三段式”实现 6.3 Verilog 状态机 | 菜鸟教程 (runoob.com) …

Proxyman 现代直观的 HTTP 调试代理应用程序

Proxyman 是一款现代而直观的 HTTP 调试代理应用程序&#xff0c;它的功能强大&#xff0c;使您可以轻松捕获、检查和操作 HTTP(s) 流量。不再让繁杂的网络调试工具阻碍您的工作&#xff0c;使用 Proxyman&#xff0c;您将轻松应对网络调试的挑战。 下载地址&#xff1a;https…

el-table 固定前n行

el-table 固定前n行 第一种&#xff0c;通过设置前几行粘性布局 <el-table:data"tableData2"borderheight"calc(98% - 40px)"// 设置行样式:row-class-name"TableRowClassName"selection-change"handleSelectionChange" ><…

计网期末复习指南(四):网络层(IP协议、IPv4、IPv6、CIDR、ARP、ICMP)

前言&#xff1a;本系列文章旨在通过TCP/IP协议簇自下而上的梳理大致的知识点&#xff0c;从计算机网络体系结构出发到应用层&#xff0c;每一个协议层通过一篇文章进行总结&#xff0c;本系列正在持续更新中... 计网期末复习指南&#xff08;一&#xff09;&#xff1a;计算…

Java 初识

Java 的发展历程 Sun 公司。 Oracle 公司。 普通版本&#xff0c;也叫过渡版本。 正式版本&#xff0c;也叫长期支持版本&#xff08;LTS&#xff09;。 Java SE&#xff0c;Java EE&#xff0c;Java ME Java 技术体系分为三个平台&#xff1a;Java SE&#xff0c;Java EE&a…

【全开源】Fastflow工作流系统(FastAdmin+ThinkPHP)

&#x1f680;Fastflow工作流系统&#xff1a;高效协作&#xff0c;流程无忧​ 一款基于FastAdminThinkPHP开发的可视化工作流程审批插件&#xff0c;帮助用户基于企业业务模式和管理模式自行定义所需的各种流程应用&#xff0c;快速构建企业自身的流程管控体系&#xff0c;快…

Windows mstsc

windows mstsc 局域网远程计算机192.168.0.113为例&#xff0c;远程控制命令mstsc

【mysql】数据报错: incorrect datetime value ‘0000-00-00 00:00:00‘ for column

一、问题原因 时间字段在导入值0000-00-00 00:00:00或者添加 NOT NULL的时间字段时&#xff0c;会往mysql添加0值&#xff0c;此时可能出现此报错。 这是因为当前的MySQL不支持datetime为0&#xff0c;在MySQL5.7版本以上&#xff0c;默认设置sql_mode模式包含NO_ZERO_DATE, N…

SQL Server数据库xp_cmdshell提权笔记

文章目录 一、简介二、搭建环境三、利用条件1、查询 xp_cmdshell 是否开启&#xff0c;返回为1则证明存在2、判断权限是不是sa&#xff0c;回是1说明是sa3、开启xp_cmdshell4、关闭xp_cmdshell 四、获取数据库权限1、成功获取sqlserver&#xff0c;进行登陆2、开启xp_cmdshell权…

记录汇川:红绿灯与HMI-ST

项目要求&#xff1a; 子程序&#xff1a; 子程序&#xff1a; 实际动作如下&#xff1a; 红绿灯与HMI-ST

ChatGPT交卷2024年高考新课标I卷语文关于AI方面的作文试题

2024年新课标I卷作文试题&#xff1a; 阅读下面的材料&#xff0c;根据要求写作。&#xff08;60分&#xff09; 随着互联网的普及、人工智能的应用&#xff0c;越来越多的问题能很快得到答案。那么&#xff0c;我们的问题是否会越来越少&#xff1f; 以上材料引发了你怎样的…