CSP认证

article/2025/9/28 19:11:56

【CSP】试题编号 202212-2-训练计划

    • 题目:训练计划
    • 计算最早/最晚开始时间
      • 最早开始时间
      • 发散
      • 最晚开始时间
    • 代码与上机
      • 代码
      • 上机结果

题目:训练计划

题目
输入与输出
样例1
样例2
样例3
此题目样例有坑:样例中没有正确输出过一个最晚开始时间

所以在最开始处理问题的时候,直接将最晚开始时间处理成最晚=n+1-T[i],其中,T[i]代表项目i所占用的时间。这也是一开始一直只能得到70分的原因(就这让我还以为,计算最早开始时间出错,一直在想哪里有问题)

计算最早/最晚开始时间

根据样例二,分别计算最早/最晚开始时间
在这里插入图片描述

最早开始时间

最早开始时间value最早开始时间value
E[1]1E[5]max{1,1+T[1]+T[2]}
E[2]max{1, 1+T[1]}E[6]max{1,1+T[3]}
E[3]1E[7]1
E[4]max{1, 1+T[3]}

表中,E代表最早开始时间,T代表项目需要时间。例如:E[5],代表项目5的最早开始时间;T[5],代表项目5所需时间。
另外,还使用到了D、L数组。D代表depend依赖;L,代表最晚开始时间

也就是说,只要遍历项目5的依赖,就可以计算出项目5的最早开始时间,而题目提供的树中父亲表示法的结构,也适合进行该操作。
由于题目中说明了最多有1个依赖,所以直接采用依赖数组D,去递推计算即可。
所以最开的想法是:采用while循环,一直遍历到D[i]==0时,去计算最早发生时间

for(int i=1;i<=m;++i){int t=1,d=i;while(D[d]!=0){t += T[D[d]];d = D[d];//更新d,用于查找上一层依赖的项目}//记录项目i的最早开始时间E[i]=t;
}

参考最优化的想法,可以知道:其实,E[5]=max{1,E[2]+T[2]},并且由于,题目中说明了:D[i]<i,即是项目i的前置依赖项目D[i],一定小于i,所以,可以从前往后(i从1到m),依次计算出项目i的最早开始时间

//计算最先开始时间
for(int i=1;i<=m;++i){if(D[i]!=0){E[i]=E[D[i]]+T[D[i]];}else{E[i]=1;}}

发散

倘若对于项目5而言,它有两条出边(2个依赖)
在这里插入图片描述
那么,E[5]=max{1, 1+T[1]+T[2] ,1+T[3]+T[4]}。

最晚开始时间

最晚开始时间value最晚开始时间value
L[1]min{n, n+1-T[5]-T[2]-T[1]}L[5]min{n, n+1-T[5]}
L[2]min{n, n+1-T[5]-T[2]}L[6]min{n, n+1-T[6]}
L[3]min{n, n+1-T[3], n+1-T[6]-T[3], n+1-T[4]-T[3]}L[7]min{n , n+1-T[7]}
L[4]min{n, n+1-T[4]}

根据AOE网的计算顺序,可以知道,采用从后往前算(i从7到1)。其中比较难处理的是项目3
首先,同样采用将L带入表达式中,那么有:

L[3] = min{n, n+1-T[3], n+1-T[6]-T[3], n+1-T[4]-T[3]}
=min{n, n+1-T[3], L[6]-T[3], L[4]-T[3]}

项目3有2条进边,但是可以知道其中,L[6]-T[3]可以先于L[4]-T[3]被计算出来(因为可以通过D[6]=3,找到项目6的依赖项目3,从而先计算出L[6]-T[3],而当遍历i=4时,又可以计算出L[4]-T[3],…,从而一直遍历到i=3)
故有如下代码:

    //初始条件:L[1,...,7]={n,...,n}bool flag=true;//是否可以完成训练计划//计算最后开始时间for(int i=m;i>=1;--i){L[i]=min(L[i],n+1-T[i]);if(D[i]!=0){L[D[i]]=min(L[D[i]],L[i]-T[D[i]]);}if(L[i]<=0) flag=false;}

代码与上机

代码

#include<bits/stdc++.h>
using namespace std;const int maxn=105;
int D[maxn],T[maxn];//D[i]==j:i的依赖是j,T[i]:项目i所需时间
int E[maxn],L[maxn];//E:最早开始时间, L:最晚开始时间
int main(){//接收题目输入int n,m;cin>>n>>m;for(int i=1;i<=m;++i){cin>>D[i];}for(int i=1;i<=m;++i){cin>>T[i];}//计算最先开始时间for(int i=1;i<=m;++i){if(D[i]!=0){E[i]=E[D[i]]+T[D[i]];}else{E[i]=1;}L[i]=n;//初始化L数组}bool flag=true;//计算最后开始时间for(int i=m;i>=1;--i){L[i]=min(L[i],n+1-T[i]);if(D[i]!=0){L[D[i]]=min(L[D[i]],L[i]-T[D[i]]);}if(L[i]<=0) flag=false;}for(int i=1;i<=m;++i){cout<<E[i]<<" ";}if(flag){cout<<endl;for(int i=1;i<=m;++i){cout<<L[i]<<" ";}}//system("pause");return 0;
}

上机结果

在这里插入图片描述


http://chatgpt.dhexx.cn/article/xXRNmsSw.shtml

相关文章

CCF CSP认证

文章目录 :heart:[CCF CSP认证 (cspro.org)](https://www.cspro.org/):heart:1.主办单位2.认证目的3.认证内容4.认证方式5.准备认证上机环境6. 选择考试语言7. 选择编译环境8. 选择IDE9.认证前模拟练习10.成绩效力&#xff1a; ❤️CCF CSP认证 (cspro.org)❤️ 1.主办单位 中…

四大含金量高的算法证书考试

证书考试推荐 一、PAT 计算机程序设计能力测试二、CCF CSP认证三、团体程序设计天梯赛四、蓝桥杯大赛 一、PAT 计算机程序设计能力测试 官网&#xff1a;PAT 计算机程序设计能力测试 PAT为浙江大学出的一款程序设计的测试网站&#xff0c;分为乙级、甲级、顶级三种&#xff0…

2阶实对称矩阵特征值和特征向量的简单求解方法

2阶实对称矩阵特性 定理&#xff1a;2阶实对称矩阵H的特征值是实数 H[a,b;b,c] a,b,c是实数&#xff0c;λ 是特征值 A[a-λ,b;b,c-λ] 特征值求解方法为&#xff1a;(a- λ )(c- λ) - b2 0 求解方程得到两个根为&#xff1a;λ&#xff08;ac&#xff09;&…

求解矩阵特征值的QR算法

1. 算法原理介绍&#xff1a; 1. Householder变换&#xff1a; 2. Givens变换&#xff1a; 3. 矩阵的QR分解 4. 计算特征值的QR方法 5. 上Hessenberg矩阵方法&#xff1a; 2. 实施过程&#xff1a; 1. 约化过程&#xff1a; 1. Householder变换&#xff1a; 2. Givens变换&a…

【OpenCV4】计算对称矩阵特征值和特征向量 cv::eigen() 用法详解和代码示例(c++)

函数原型&#xff1a; bool cv::eigen ( InputArray src,OutputArray eigenvalues,OutputArray eigenvectors noArray() ) 解析&#xff1a; src&#xff1a;输入矩阵&#xff0c;只能是 CV_32FC1 或 CV_64FC1 类型的方阵&#xff08;即矩阵转置后还是自己&#xff09;eig…

实对称矩阵的特征值求法_线性代数中的二次型,实际上是特征值的几何应用,概念需加强理解...

线性代数中的二次型,实际上是特征值的几何应用,概念仍需加强理解 二次型:实际上是特征值的几何应用 1、二次型化标准形:特征值、特征向量、相似对角化 2、二次型的正定性 3、合同:坐标变换 正交变换化二次型为标准形,标准为求二次型矩阵 A 的特征值,求坐标变换就是求 A 的特…

实对称矩阵的特征值求法_矩阵论系列——特征值篇

特征值篇1——特征值和特征向量 特征值篇1--特征值和特征向量_thompson的博客-CSDN博客​blog.csdn.net 特征值篇2——特征子空间 特征值篇2--特征子空间_thompson的博客-CSDN博客​blog.csdn.net 特征值篇3——矩阵可相似对角化的充要条件 特征值篇3--矩阵可相似对角化的充要条…

matlab矩阵特征值分解,矩阵特征值分解与奇异值分解含义解析及应用

原文在此,仅仅将原文的Matlab代码改为Python3版本。 特征值与特征向量的几何意义 矩阵的乘法是什么,别只告诉我只是“前一个矩阵的行乘以后一个矩阵的列”,还会一点的可能还会说“前一个矩阵的列数等于后一个矩阵的行数才能相乘”,然而,这里却会和你说——那都是表象。 矩…

c语言求矩阵特征值的程序,如何用C语言编写求对称矩阵的特征值和特征向量的程序编写对称矩阵的特征值和特征向量,其中矩阵用二维数组保存.特征向量要求有大到小放到数组里....

优质解答 //数值计算程序-特征值和特征向量 // //约化对称矩阵为三对角对称矩阵 //利用Householder变换将n阶实对称矩阵约化为对称三对角矩阵 //a-长度为n*n的数组,存放n阶实对称矩阵 //n-矩阵的阶数 //q-长度为n*n的数组,返回时存放Householder变换矩阵 //b-长度为n的数组,返回…

实对称矩阵的特征值求法_机器学习与线性代数 - 特殊矩阵

在线性代数中,有一些特殊的矩阵具有易于分析和操作的特性。它们的特征向量可能具有特定的特征值或特殊关系。还有一些方法可以将一个矩阵分解成这些“更简单”的矩阵。 操作复杂性的降低提高了可伸缩性。然而,即使这些矩阵都是特殊的,它们也不是罕见的。在机器学习和许多应用…

实对称矩阵特征值特征向量求解算法C语言实现

一 算法原理 雅可比方法用于求解实对称矩阵的特征值和特征向量,对于实对称矩阵 A A A,必有正交矩阵 U U U,使得 U T A U D U^{T}AUD UTAUD. D D D是一个对角阵,主对角线的元素是矩阵 A A A的特征值,正交矩阵 U U U的每一列对应于属于矩阵 D D D的主对角线对应元素的特征向量.…

【矩阵论】对称矩阵特征值的性质与直积

前言 在许多实际问题中&#xff0c;所产生的矩阵往往都是对称矩阵&#xff0c;比如我们耳熟能详的实对称矩阵也是重要的研究对象。以下就从实对称矩阵的角度出发&#xff0c;利用特征值的极小极大原理&#xff0c;从普通特征值问题 A x λ x Ax\lambda x Axλx衍生到广义特征…

对称矩阵的特征值与特征向量

对称矩阵&#xff1a; A A的转置 这里讨论的是实对称矩阵 两个好的性质&#xff1a; 1&#xff0c; 特征值是实数 2&#xff0c;特征向量是两两正交的 一个对称矩阵A可以进行如下分解&#xff1a; AQQ的转置 对于对称矩阵来说&#xff0c;有一个性质&#xff1a;主元的符…

【Java】 IDEA使用教程

前言&#xff1a;IntelliJ IDEA 如果说IntelliJ IDEA是一款现代化智能开发工具的话&#xff0c;Eclipse则称得上是石器时代的东西了。其实笔者也是一枚从Eclipse转IDEA的探索者&#xff0c;随着近期的不断开发实践和调试&#xff0c;逐步体会到这款智能IDE带来的巨大开发便利&…

IDEA 使用入门

intellij 来阿里之前&#xff0c;还在使用eclipse&#xff0c;后来受无独 同学影响&#xff0c;开始使用intellij&#xff0c;从此以后再也没想过回到eclipse。最近周边的人使用intellij越来越多&#xff0c;还有一部分在eclipse和intellij之间徘徊选择&#xff0c;本文目的是…

idea新手使用教程总结

前言 本教程建立在建设你对idea有一个初步的概念,方便你更快的掌握和使用Intellij Idea开发工具。 由于本人使用的是Windows系统,故下方的所有演示均在Windows系统环境下 Windows下安装 系统环境要求 系统支持:Microsoft Windows 8 / 7 / Vista / 2003 / XP(每个系统版本…

IntelliJ IDEA 使用教程(2019图文版)

前言&#xff1a;IntelliJ IDEA 如果说IntelliJ IDEA是一款现代化智能开发工具的话&#xff0c;Eclipse则称得上是石器时代的东西了。其实笔者也是一枚从Eclipse转IDEA的探索者&#xff0c;随着近期的不断开发实践和调试&#xff0c;逐步体会到这款智能IDE带来的巨大开发便利…

IntelliJ IDEA使用教程创建Java 应用程序

前言 在本教程中&#xff0c;您将学习如何创建、运行和打包打印到系统输出的简单 Java 应用程序。在此过程中&#xff0c;您将熟悉IntelliJ IDEA功能&#xff0c;以提高开发人员的工作效率&#xff1a;编码辅助和补充工具。 IDE解释 IDE&#xff08;集成开发环境&#xff09;&a…

IDEA的使用教程

JDK、JRE、JVM JDK&#xff1a;Java Development Kit&#xff08;java开发者工具&#xff09;要开发java程序就需要有JDKJRE&#xff1a;Java Runtime Environment&#xff08;Java运行环境&#xff09;有JRE就可以运行Java程序JVM&#xff1a;Java Virtual Machine&#xff0…

IntelliJ IDEA 实用操作教程

作者&#xff1a;胡川港 知乎主页&#xff1a;zhihu.com/people/hu-chuan-gang-58 GitHub主页&#xff1a;https://github.com/xiaoxiunique 本文介绍了 IDEA 中令人相见恨晚的技巧&#xff0c;文中从入门、简单项目创建开始&#xff0c;介绍 IDEA 中多光标操作、常用配置、插件…