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

2024-03-06 10:20

本文主要是介绍【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;
}

请添加图片描述

这篇关于【CSP试题回顾】202212-2-训练计划的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/779746

相关文章

2024年流动式起重机司机证模拟考试题库及流动式起重机司机理论考试试题

题库来源:安全生产模拟考试一点通公众号小程序 2024年流动式起重机司机证模拟考试题库及流动式起重机司机理论考试试题是由安全生产模拟考试一点通提供,流动式起重机司机证模拟考试题库是根据流动式起重机司机最新版教材,流动式起重机司机大纲整理而成(含2024年流动式起重机司机证模拟考试题库及流动式起重机司机理论考试试题参考答案和部分工种参考解析),掌握本资料和学校方法,考试容易。流动式起重机司机考试技

CSP 2023 提高级第一轮 CSP-S 2023初试题 完善程序第二题解析 未完

一、题目阅读 (最大值之和)给定整数序列 a0,⋯,an−1,求该序列所有非空连续子序列的最大值之和。上述参数满足 1≤n≤105 和 1≤ai≤108。 一个序列的非空连续子序列可以用两个下标 ll 和 rr(其中0≤l≤r<n0≤l≤r<n)表示,对应的序列为 al,al+1,⋯,ar​。两个非空连续子序列不同,当且仅当下标不同。 例如,当原序列为 [1,2,1,2] 时,要计算子序列 [

MiniGPT-3D, 首个高效的3D点云大语言模型,仅需一张RTX3090显卡,训练一天时间,已开源

项目主页:https://tangyuan96.github.io/minigpt_3d_project_page/ 代码:https://github.com/TangYuan96/MiniGPT-3D 论文:https://arxiv.org/pdf/2405.01413 MiniGPT-3D在多个任务上取得了SoTA,被ACM MM2024接收,只拥有47.8M的可训练参数,在一张RTX

Spark MLlib模型训练—聚类算法 PIC(Power Iteration Clustering)

Spark MLlib模型训练—聚类算法 PIC(Power Iteration Clustering) Power Iteration Clustering (PIC) 是一种基于图的聚类算法,用于在大规模数据集上进行高效的社区检测。PIC 算法的核心思想是通过迭代图的幂运算来发现数据中的潜在簇。该算法适用于处理大规模图数据,特别是在社交网络分析、推荐系统和生物信息学等领域具有广泛应用。Spa

SigLIP——采用sigmoid损失的图文预训练方式

SigLIP——采用sigmoid损失的图文预训练方式 FesianXu 20240825 at Wechat Search Team 前言 CLIP中的infoNCE损失是一种对比性损失,在SigLIP这个工作中,作者提出采用非对比性的sigmoid损失,能够更高效地进行图文预训练,本文进行介绍。如有谬误请见谅并联系指出,本文遵守CC 4.0 BY-SA版权协议,转载请联系作者并注

Java基础回顾系列-第七天-高级编程之IO

Java基础回顾系列-第七天-高级编程之IO 文件操作字节流与字符流OutputStream字节输出流FileOutputStream InputStream字节输入流FileInputStream Writer字符输出流FileWriter Reader字符输入流字节流与字符流的区别转换流InputStreamReaderOutputStreamWriter 文件复制 字符编码内存操作流(

Java基础回顾系列-第五天-高级编程之API类库

Java基础回顾系列-第五天-高级编程之API类库 Java基础类库StringBufferStringBuilderStringCharSequence接口AutoCloseable接口RuntimeSystemCleaner对象克隆 数字操作类Math数学计算类Random随机数生成类BigInteger/BigDecimal大数字操作类 日期操作类DateSimpleDateForma

Java基础回顾系列-第三天-Lambda表达式

Java基础回顾系列-第三天-Lambda表达式 Lambda表达式方法引用引用静态方法引用实例化对象的方法引用特定类型的方法引用构造方法 内建函数式接口Function基础接口DoubleToIntFunction 类型转换接口Consumer消费型函数式接口Supplier供给型函数式接口Predicate断言型函数式接口 Stream API 该篇博文需重点了解:内建函数式

Java基础回顾系列-第二天-面向对象编程

面向对象编程 Java类核心开发结构面向对象封装继承多态 抽象类abstract接口interface抽象类与接口的区别深入分析类与对象内存分析 继承extends重写(Override)与重载(Overload)重写(Override)重载(Overload)重写与重载之间的区别总结 this关键字static关键字static变量static方法static代码块 代码块String类特

Java基础回顾系列-第六天-Java集合

Java基础回顾系列-第六天-Java集合 集合概述数组的弊端集合框架的优点Java集合关系图集合框架体系图java.util.Collection接口 List集合java.util.List接口java.util.ArrayListjava.util.LinkedListjava.util.Vector Set集合java.util.Set接口java.util.HashSetjava