作物杂交(spfa()算法)

news2025/7/18 11:59:27

蓝桥杯集训每日一题acwing3305

作物杂交是作物栽培中重要的一步。

已知有 N 种作物 (编号 1 至 N),第 i 种作物从播种到成熟的时间为 Ti。

作物之间两两可以进行杂交,杂交时间取两种中时间较长的一方。

如作物 A 种植时间为 5 天,作物 B 种植时间为 7 天,则 AB 杂交花费的时间为 7 天。

作物杂交会产生固定的作物,新产生的作物仍然属于 N 种作物中的一种。

初始时,拥有其中 M 种作物的种子 (数量无限,可以支持多次杂交)。

同时可以进行多个杂交过程。

求问对于给定的目标种子,最少需要多少天能够得到。

如存在 4 种作物 ABCD,各自的成熟时间为 5 天、7 天、3 天、8 天。

初始拥有 AB 两种作物的种子,目标种子为 D,已知杂交情况为 A×B→C,A×C→D。

则最短的杂交过程为:

第 1 天到第 7 天 (作物 B 的时间),A×B→C。

第 8 天到第 12 天 (作物 A 的时间),A×C→D。

花费 12 天得到作物 D 的种子。

输入格式

输入的第 1 行包含 4 个整数 N,M,K,T,N 表示作物种类总数 (编号 1 至 N),M 表示初始拥有的作物种子类型数量,K 表示可以杂交的方案数,T 表示目标种子的编号。

第 2 行包含 N 个整数,其中第 i 个整数表示第 i 种作物的种植时间 Ti。

第 3 行包含 M 个整数,分别表示已拥有的种子类型 Kj,Kj 两两不同。

第 4 至 K+3 行,每行包含 3 个整数 A,B,C,表示第 A类作物和第 B 类作物杂交可以获得第 C� 类作物的种子。

输出格式

输出一个整数,表示得到目标种子的最短杂交时间。

样例解释

1≤N≤2000,
2≤M≤N,
1≤K≤10^5,
1≤T≤N,
1≤Ti≤100,
1≤Kj≤M,
保证目标种子一定可以通过杂交得到。
不保证作物 A 和 B 杂交只能生成作物 C(也就是说,A×B→C 和 A×B→D 可能同时在输入中出现)
不保证作物 C 只能由作物 A 和 B 杂交生成(也就是说,A×B→D 和 A×C→D 可能同时在输入中出现)。
不保证同一杂交公式不在输入中重复出现。

输入样例:

6 2 4 6
5 3 4 6 4 9
1 2
1 2 3
1 3 4
2 3 5
4 5 6

输出样例:

16

样例解释

第 1 天至第 5 天,将编号 1 与编号 2 的作物杂交,得到编号 3 的作物种子。

第 6 天至第 10 天,将编号 1 与编号 3 的作物杂交,得到编号 4 的作物种子。

第 6 天至第 9 天,将编号 2 与编号 3 的作物杂交,得到编号 5 的作物种子。

第 11 天至第 16 天,将编号 4 与编号 5 的作物杂交,得到编号 6 的作物种子。

总共花费 16 天。

 

 考虑动态规划,属性是求最小花费时间。

采用的数据存储结构是邻接表,这里相当于对每一个种子都开一个链表,以该种子为表头,存储与该种子配对杂交的种子,以及生成的目标种子

dist数组存储得到第i个种子所花费的总时长

所以当用spfa()算法求时长时,动态转移方程为:

假设 x  杂交  y  ------>    Z             则有dist [ Z ]  = max( dist[ x ] , dist[ y ] ) +max( w[ x ] , w[ y ] ) ;

不写成max(dist[x] + w[x] ,dist[y] + w[y]),因为当中可能有重复的时间段无法计算到

接下来看代码解析:

 

 

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

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

相关文章

NTLM协议原理分析

LM Hash 和 NTLM Hashwindows用户的密码以哈希的形式保存在SAM文件中“%SystemRoot%\system32\config\SAM”。域用户的密码以哈希的形式保存在域控的 NTDS.dit 文件中。 密码的哈希值格式如下用域名:uid:LM哈希:NTLM哈希:::由于LM Hash 有安全缺陷,所以Windows Vist…

88. 合并两个有序数组

给你两个按 非递减顺序 排列的整数数组 nums1 和 nums2,另有两个整数 m 和 n ,分别表示 nums1 和 nums2 中的元素数目。请你 合并 nums2 到 nums1 中,使合并后的数组同样按 非递减顺序 排列。注意:最终,合并后数组不应…

【Linux】实现简易的Shell命令行解释器

大家好我是沐曦希💕 文章目录一、前言二、准备工作1.输出提示符2.输入和获取命令3.shell运行原理4.内建命令5.替换三、整体代码一、前言 前面学到了进程创建,进程终止,进程等待,进程替换,那么通过这些来制作一个简易的…

Python每日一练(20230308)

目录 1. Excel表列名称 ★ 2. 同构字符串 ★★ 3. 分割回文串 II ★★★ 🌟 每日一练刷题专栏 C/C 每日一练 ​专栏 Python 每日一练 专栏 1. Excel表列名称 给你一个整数 columnNumber ,返回它在 Excel 表中相对应的列名称。 例如&#xff1…

在 k8S 中搭建 SonarQube 9-community 版本(使用 PostgreSQL 数据库)

本文搭建的 SonarQube 版本是 7.4.9-community,由于在官方文档中声明 7.9 版本之后就不再支持使用 MySQL 数据库。所以此次搭建使用的数据库是 PostgreSQL 11.4 版本。 一、部署 PostgreSQL 服务 1. 创建命名空间 将 PostgreSQL 和 SonarQube 放在同一个命名空间…

02从零开始学Java之Java到底是个啥?

博主简介我是壹壹哥(孙玉昌),十年软件开发授课经验,CSDN博客专家、阿里云专家博主、掘金优秀创作者、infoQ专家博主;关注壹壹哥(孙玉昌),带你玩转Java,轻松实现从入门到放弃,哦不,到熟悉&#x…

【基于STM32的多功能台灯控制】

基于STM32的多功能台灯控制 在之前一篇博文中已出过智能台灯相关的介绍,在这里对之前的模块以及功能上进行了优化和功能上的改进,需源码或实物可私【创作不易-拒绝白嫖】 功能说明 1、按键模式多功能台灯在设计上使用了4个按键分别做为 按键1模式的切换…

2.5 Strassen矩阵乘法

矩阵乘法是线性代数中最常见的问题之一,在数值计算中有广泛的应用。设4和B是两个nxn矩阵,它们的乘积 AB 同样是一个nxn矩阵。A和B的乘积矩阵 C中元素C定义为C 2anw6o1若依此定义来计算4 和B的乘积短阵C,则每计算 C的一个元素C,需要…

如何提高爬虫工作效率

单进程单线程爬取目标网站太过缓慢,这个只是针对新手来说非常友好,只适合爬取小规模项目,如果遇到大型项目就不得不考虑多线程、线程池、进程池以及协程等问题。那么我们该如何提升工作效率降低成本? 学习之前首先要对线程&#…

windows下一键启动vue项目,后台运行cmd命令

1、写好启动vue的bat echo off E: cd E:\project-html\study\vue-demo npm run serve 2、准备vbs脚本,指向bat Set hd CreateObject("Wscript.Shell")hd.run "cmd /c C:\Users\xxh\Desktop\vue-demo.bat",vbhide 3、双击vbs脚本就可以启动了…

java八股系列——SpringMVC从接受请求到完成响应的过程

Spring的MVC框架是围绕一个DispatcherServlet来设计的,这个Servlet会把请求分发给各个处理器,并支持可配置的处理器映射、视图渲染、本地化、时区与主题渲染等,甚至还能支持文件上传。 流程大致如下: 用户发起请求:用…

一般用哪些工具做大数据可视化分析?

做数据分析这些年来,从刚开始的死磕excel,到现在成为数据分析行业的偷懒大户,使用过的工具还真不少! 这篇分享一些我在可视化工具上的使用心得,由简单到复杂,按照可视化类型一共分为纯统计图表类、GIS地图…

C/C++每日一练(20230308)

目录 1. 最大间距 ★★★ 2. 被围绕的区域 ★★ 3. 天际线问题 ★★★ 🌟 每日一练刷题专栏 C/C 每日一练 ​专栏 Python 每日一练 ​专栏 1. 最大间距 给定一个无序的数组,找出数组在排序之后,相邻元素之间最大的差值。 如果数组…

Windows环境下nacos的下载与安装

一、nacos的下载地址:Releases alibaba/nacos GitHub根据自己项目配置的版本,下载对应的nacos客户端。windows下载上面的tar.gz的安装包,linux下载下面的zip包二、下载解压成功后,修改配置文件D:\nacos\bin下面的startup.cmd。把…

基于JavaEE社区物业管理系统开发与实现(附源码资料)

文章目录1. 适用人群2. 你将收获3.项目简介4.技术栈5.测试账号6.部分功能模块展示6.1.管理员6.2.业主1. 适用人群 本课程主要是针对计算机专业相关正在做毕业设计或者是需要实战项目的Java开发学习者。 2. 你将收获 提供:项目源码、项目文档、数据库脚本、软件工…

sealos 神奇功能 serverless kubernetes 之 cloud terminal

何为 serverless kubernetes 顾名思义,就是不需要安装直接打开网页就可以直接使用的 kubernetes,是一个多租户共享 kubernetes 的租户模型,这样做的好处是对于用户的使用成本极低,而且无需安装 kubernetes, 且天生对多租户的隔离…

C语言杂记(字符串)

字符串 字符串的定义方法 注意&#xff1a;char *data3 “hello3”;//字符串常量&#xff0c;不允许被修改 #include <stdio.h>int main() {char data[] {h,e,l,l,o};//字符数组char data2[] "hello2";//可修改char *data3 "hello3";//字符串常…

Ubuntu20.04 源码编译安装SRS-6流媒体服务器,开启GB28181支持

1. 下载SRS源码 直接从仓库clone git clone -b develop https://gitee.com/ossrs/srs.git 2. 编译源码 此处通过 --gb28181on 开启GB28181支持&#xff0c;默认是不开启的 cd srs/trunk && ./configure --gb28181on && make -j4 3. 编译过程中遇到的问题 …

【专项训练】前言:刻意练习,不断的过遍数才是王道

如何精通一个领域? 拆分知识点刻意练习:每个区域的基础动作分解训练和反复刻意练习反馈(主动反馈、被动反馈、及时反馈)任何知识体系都是一颗树,一定要梳理成思维导图,明确知识与知识之间的关系! 通过7-8周密集训练,练好基本功,彻底攻克LeetCode! 严格执行五毒神掌!…

Leetcode是什么

力扣&#xff08;LeetCode&#xff09;是领扣网络旗下专注于程序员技术成长和企业技术人才服务的品牌。源自美国硅谷&#xff0c;力扣为全球程序员提供了专业的IT 技术职业化提升平台&#xff0c;有效帮助程序员实现快速进步和长期成长。 此外&#xff0c;力扣&#xff08;Leet…