【CSP试题回顾】202212-2-训练计划

CSP-202212-2-训练计划

解题思路

  1. 输入和初始化

    • 首先,代码从输入中获取项目的截止日期和项目数量。
    • 然后,它初始化一个项目列表,每个项目都有其依赖项、被依赖的项目集合、完成时间、总完成时间(包括依赖链)、最早和最晚开始时间。
  2. 建立依赖关系

    • 通过输入确定每个项目的依赖项目。如果一个项目依赖另一个项目,那么被依赖的项目的集合会更新,加入依赖它的项目。
    • 同时记录每个项目的直接完成时间。
  3. 计算总完成时间(Sumtime)

    • 从后向前遍历项目列表,如果一个项目有依赖(即,它不是独立的),则更新它依赖的项目的总完成时间为:当前项目的总完成时间加上依赖项目的直接完成时间的最大值。
  4. 计算最迟开始时间

    • 遍历项目列表,每个项目的最迟开始时间等于截止日期减去该项目的总完成时间加一。
    • 如果计算出的最迟开始时间小于或等于0,则标记flag,表示存在项目不能在截止日期前完成。
  5. 计算最早开始时间

    • 遍历项目列表,如果一个项目没有依赖(即其依赖项目编号为0),其最早开始时间为1。
    • 如果项目有依赖,其最早开始时间为依赖项目的最早开始时间加上依赖项目的完成时间。
  6. 输出

    • 最后,代码输出每个项目的最早和最晚开始时间。如果flag被设置(意味着有项目无法按时完成),则只输出最早开始时间。

完整代码

#include <iostream>
#include <vector>
#include <cmath>
using namespace std;struct MyProject
{int dependProject; // 依赖哪一个项目,0是无依赖项目vector<int>dependSet; // 被依赖的项目集合int timeSpend; // 完成本任务所需要的时间int Sumtime; // 完成任务(依赖链)所需时间int earliestStartTime; // 最早开始时间int latestStartTime; //最迟开始时间
};int main() {int deadline, projectNum;cin >> deadline >> projectNum;vector<MyProject>projectList(projectNum + 1);// 输入依赖 for (int i = 1; i <= projectNum; i++){cin >> projectList[i].dependProject;projectList[projectList[i].dependProject].dependSet.push_back(i);}// 输入单个任务所消耗时间for (int i = 1; i <= projectNum; i++){cin >> projectList[i].timeSpend;projectList[i].Sumtime = projectList[i].timeSpend;}// 计算每个任务的Sumtimefor (int i = projectNum; i >= 1; i--){if (projectList[i].dependProject != 0) // 有依赖-找到最长依赖时间{projectList[projectList[i].dependProject].Sumtime = max(projectList[projectList[i].dependProject].Sumtime,projectList[projectList[i].dependProject].timeSpend + projectList[i].Sumtime);}}bool flag = 0; // 是否输出latestStartTime// 计算最迟开始时间for (int i = 1; i <= projectNum; i++){projectList[i].latestStartTime = deadline - projectList[i].Sumtime + 1;if (projectList[i].latestStartTime <= 0) flag++;}// 计算最早开始时间for (int i = 1; i <= projectNum; i++){if (projectList[i].dependProject == 0) // 没有依赖{projectList[i].earliestStartTime = 1;}else // 有依赖-依赖项目的最早开始并完成后的日期{projectList[i].earliestStartTime = projectList[projectList[i].dependProject].earliestStartTime +projectList[projectList[i].dependProject].timeSpend;}}for (int i = 1; i <= projectNum; i++){cout << projectList[i].earliestStartTime << " ";}cout << endl;if (!flag){for (int i = 1; i <= projectNum; i++){cout << projectList[i].latestStartTime << " ";}} return 0;
}

请添加图片描述

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

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

相关文章

【JavaSE】面向对象——多态性

多态性 多态性的概念 所谓多态性&#xff0c;理解为一个事物的多种形态。具体点就是去完成某个动作时&#xff0c;不同的对象会产生不同的状态。 多态性的好处 多态在Java中指的是父类的引用指向子类的对象&#xff0c;或者可以说是子类的对象赋给父类的引用。这样在我们的…

SpringBoot实现分页模糊查询

1. Navicat查询数据 Navicat中查询所有数据 SELECT * FROM sys_user;Navicat中查询前两条数据&#xff08;俩种方式&#xff09; SELECT * FROM sys_user LIMIT 2; //从0开始&#xff0c;第一个参数是起始位置即(pageNum-1)*pageSize&#xff0c;第二个参数是步长 SELECT * …

项目部署后 通过公网IP访问不到的问题解决

目录 1.检查项目是否在运行(第二行命令) 2.检查所用服务器防火墙是否打开 3.检查linux系统防火墙有没有打开 问题如图: 首先确保项目已经成功部署 1.检查项目是否在运行(第二行命令) 第一行命令是监听58080端口,我的项目是使用该端口 2.检查所用云服务器防火墙是否打开 我…

分享77个Html杂七杂八模板,总有一款适合您

分享77个Html杂七杂八模板&#xff0c;总有一款适合您 77个Html杂七杂八模板下载链接&#xff1a;https://pan.baidu.com/s/1-RyIKaxdCu3dbnlMFMwviw?pwd8888 提取码&#xff1a;8888 学习知识费力气&#xff0c;收集整理更不易。知识付费甚欢喜&#xff0c;为咱码农谋福…

L75-25(Leetcode394字符串解码)

代码&#xff1a; 两个栈 一个存数字 一个存字符串 class Solution {public String decodeString(String s) {Deque<String> stack2 new LinkedList<>();Deque<Integer> stack1 new LinkedList<>();int n s.length();StringBuffer res new Strin…

2024年3月管理体系认证基础考试问答题及答案

管理体系认证基础 1.管理体系认证的主要过程有哪些? &#xff08;1&#xff09;认证前的活动&#xff0c;主要是与认证申请方沟通&#xff0c;对认证事宜理解一致。 &#xff08;2&#xff09;初次认证策划&#xff0c;或者称为初次审核策划&#xff0c;包括在已获得认证的…

每日好题3.5

前缀和 这个题目巨妙&#xff0c;打的时候没写出来&#xff0c;后面补题发现太牛了 思路&#xff1a;当前区间左端点 L L L &#xff0c;当我们向右移动一次&#xff0c;就相当于&#xff0c;原式 - f ( L ) f ( L 1 e 18 ) f(L) f(L 1e18) f(L)f(L1e18)&#xff0c;值就…

linuxOPS基础_服务器构成

服务器的重要结构组成 家用电脑组成&#xff1a; CPU、主板、内存条、显卡、硬盘、电源、风扇、网卡、显示器、机箱、键盘鼠标等等。 CPU CPU是电脑的大脑&#xff0c; CPU发展史&#xff1a; 32 位CPU&#xff1a;最大的内存寻址地址2^32&#xff0c;大约4G的大小。 CP…

H5:列表

目录 一、前言 二、正文 1.无序列表 2.有序列表 3.自定义列表 三、结语 一、前言 在开发场景中&#xff0c;列表的使用十分常见&#xff0c;我们开始介绍关于列表的标签使用 二、正文 列表是用来表示数据&#xff0c;则用于布局。 列表的最大的特点就是整齐、整洁、有序&a…

Mysql整理-索引

MySQL中的索引是一种数据库对象,可以提高数据检索的速度,类似于书籍的目录。它们是对数据库表中一列或多列的值进行排序的数据结构,可以让数据库查询引擎快速找到所需的行。索引对于提高数据库查询的性能至关重要,特别是在处理大量数据时。 索引类型以及其特点 以下是MySQL…

CSS3新特性

简介 继CSS2之后&#xff0c;CSS3增加了很多新的特性&#xff0c;虽然W3C仍在规范中&#xff0c;但是很多新的CSS3属性已经在很多现代浏览器中得到了支持。 CSS3边框 在CSS3中&#xff0c;可以创建圆角边框&#xff0c;添加边框阴影&#xff0c;设置边框图片&#xff0c;利用…

计算机组成原理之机器:计算机系统的基本概念

计算机组成原理之机器 笔记来源&#xff1a;哈尔滨工业大学计算机组成原理&#xff08;哈工大刘宏伟&#xff09; Chapter1&#xff1a;计算机系统的基本概念 1.1 计算机系统简介 从物理构成的角度对计算机系统分层 计算机组成原理主要关注微体系结构&#xff08;Mirco-arc…

【无标题】计算机主要应用于哪些领域

科学计算&#xff08;或称为数值计算&#xff09;、数据处理&#xff08;信息管理&#xff09;、辅助工程、生产自动化、人工智能。1、科学计算&#xff08;或称为数值计算&#xff09;&#xff1a;早期的计算机主要用于科学计算。目前&#xff0c;科学计算仍然是计算机应用的一…

【原理图PCB专题】Allegro模块化移动器件报...has the LOCKED property怎么解锁?

在模块化原理图时,PCB也需要做一个模块.mdd文件。这时需要先画好图纸然后再制作模块化文件。 修改文件时会发现模块化器件报错,无法编辑模块内部器件和走线,器件和走线都被LOCKED,如下所示报错内容: Symbol "U1" Selected Cannot edit Symbol "U1". M…

鸿蒙Harmony应用开发—ArkTS声明式开发(通用属性:组件标识)

id为组件的唯一标识&#xff0c;在整个应用内唯一。本模块提供组件标识相关接口&#xff0c;可以获取指定id组件的属性&#xff0c;也提供向指定id组件发送事件的功能。 说明&#xff1a; 从API Version 8开始支持。后续版本如有新增内容&#xff0c;则采用上角标单独标记该内容…

代码随想录算法训练营第九天

28. 实现 strStr() &#xff08;本题可以跳过&#xff09; 方法&#xff1a; 方法一&#xff1a; 暴力法 i 表示最多能移动到n-m位置&#xff0c; 超过则退出循环。j表示haystack 初始位置k表示needle的初始位置如果haystack [j] needle[k]且 k<m 则 j, k; 如果 km 则返…

OJ输入问题+准备

写在之前&#xff1a; 发现题目输入是这样的&#xff1a; 我的问题&#xff1a;如何通过空格分割这些输入的字符串并分别保存&#xff01;&#xff01;&#xff08;C语言scanf好解决一点但我选择C....&#xff09; C引入了ostringstream、istringstream、stringstream这三个类…

DevOps中集成自动化测试的具体案例

在DevOps中集成自动化测试的具体案例可以从多个角度进行分析,包括金融行业、分布式系统、大型企业等不同领域的实践。以下是几个具体的案例: 金融行业的DevOps实践:在金融行业中,DevOps被广泛应用于提升软件开发和运营的效率。例如,通过解析后台接口代码日志格式,自动化生…

蓝桥杯:DNA序列修正

问题描述 在生物学中&#xff0c;DNA 序列的相似性常被用来研究物种间的亲缘关系。现在我们有两条 DNA 序列&#xff0c;每条序列由 A、C、G、T 四种字符组成&#xff0c;长度相同。但是现在我们记录的 DNA 序列存在错误&#xff0c;为了严格满足 DNA 序列的碱基互补配对即 A …