【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.hqwc.cn/news/513080.html

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

相关文章

@RequestBody

目录 概述 深入细节 案例 RequestBody与前端传过来的json数据的匹配规则 指定模型中的属性对应什么key 用Valid校验RequestBody的参数 根据RequestBody的内容来区分使用哪个资源 概述 RequestBody主要用来接收前端传递给后端的json字符串中的数据(请求体中的数据)而最常…

鸿蒙Harmony应用开发—ArkTS声明式开发(通用属性:多态样式)

设置组件不同状态下的样式。 说明&#xff1a; 从API Version 8开始支持。后续版本如有新增内容&#xff0c;则采用上角标单独标记该内容的起始版本。 从API Version 11开始支持另一种写法attributeModifier&#xff0c;可根据开发者需要动态设置属性。 stateStyles stateStyl…

【深度学习笔记】5_8 网络中的网络NiN

注&#xff1a;本文为《动手学深度学习》开源内容&#xff0c;部分标注了个人理解&#xff0c;仅为个人学习记录&#xff0c;无抄袭搬运意图 5.8 网络中的网络&#xff08;NiN&#xff09; 前几节介绍的LeNet、AlexNet和VGG在设计上的共同之处是&#xff1a;先以由卷积层构成的…

STL容器之map和set的补充AVL树

一、AVL树 ​ 不同搜索的对比&#xff1a;1.暴力搜索时间复杂度是O(N)&#xff1b;2.二分查找的时间复杂度是O(lgN)&#xff0c;但是伴随着有序&#xff0c;插入删除挪动数据的成本极高&#xff1b;3.二叉搜索的时间复杂度是高度次数&#xff0c;极端场景会退化为类似链表时间…

MySQL 主从同步模式

MySQL主从同步是一种数据库复制技术&#xff0c;其中一个MySQL数据库服务器&#xff08;主服务器&#xff09;上的更改会被自动地传播到一个或多个其他数据库服务器&#xff08;从服务器&#xff09;。这有助于提高系统的可伸缩性、可用性和容错性。以下是设置MySQL主从同步的基…

网络编程的学习

思维导图 多路复用代码练习 select完成TCP并发服务器 #include<myhead.h> #define SER_IP "192.168.125.73" //服务器IP #define SER_PORT 8888 //服务器端口号int main(int argc, const char *argv[]) {//1、创建用于监听的套接字int sfd -1;s…

BUUCTF-MISC1

二维码1 1.打开附件 得到一个二维码 2. 查看 拉到kali用binwalk查看 3.文件分离 发现图片中含有压缩包文件 用binwalk -e 文件名 &#xff0c;进行文件分离 得到一个分离后的文件夹 点开&#xff0c;发现是一个压缩包&#xff0c;压缩包中含有加密文档 4.破解密码 用ARCH…

CSS3新特性

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

市场复盘总结 20240305

仅用于记录当天的市场情况&#xff0c;用于统计交易策略的适用情况&#xff0c;以便程序回测 短线核心&#xff1a;不参与任何级别的调整&#xff0c;采用龙空龙模式 一支股票 10%的时候可以操作&#xff0c; 90%的时间适合空仓等待 二进三&#xff1a; 进级率中 25% 最常用的…

栈和队列之队列

1.队列 1.1队列的概念 队列&#xff1a;只允许在一端进行插入数据操作&#xff0c;在另一端进行删除数据操作的特殊线性表&#xff0c;队列具有先进先出 FIFO(First In First Out) 入队列&#xff1a;进行插入操作的一端称为队尾 出队列&#xff1a;进行删除操作的一端称为队…

2023 2024年全国职业院校技能大赛中职组网络建设与运维赛项服务器Linux部分教程解析

欢迎合作 需要资料请私 Rocky 9 包含各种常考服务(包括新题型KVM等)

一个复杂的数据流转换:文件流转base64

一个复杂的数据流转换&#xff1a;文件流转base64 可是我再也没遇到一个像福贵这样令我难忘的人了&#xff0c;对自己的经历如此清楚&#xff0c;又能如此精彩地讲述自己是如何衰老的。这样的老人在乡间实在是 难以遇上&#xff0c;也许是困苦的生活损坏了他们的记忆&#xff0…