CCF-CSP 202212-2 训练计划

思路:

  1. 计算最早开始时间:最早开始时间的计算较为简单,对于没有依赖其它科目的科目,其最早开始时间为1;对于有依赖的科目,其最早开始时间为其依赖科目的最早结束时间+1,即

  1. 判断是否需要计算最晚开始时间:使用变量tag来记录是否需要计算最晚开始时间。在计算最早开始时间的过程中,同时计算该科目的学习结束时间,若结束时间大于总天数,则不需要计算最晚开始时间,将tag置为false。

  1. 计算最晚开始时间:计算最晚开始时间是要注意各个科目之间的依赖关系,要逆序计算每个科目的最晚开始时间,同时考虑该科目是否被依赖。逆序遍历n个科目的依赖关系数组。计算科目j时,遍历第j+1个科目到第n个科目,若科目j没有被依赖。则其最晚开始时间为:总天数m - 学习天数days[j] + 1; 若这些科目中有依赖科目j的科目k,则科目j的最晚开始时间为:科目k的最晚开始时间 - 科目j的学习天数days[j]

#include<bits/stdc++.h>
using namespace std;
int main() {
    int m;
    int n;
    cin >> n;
    cin >> m;
    vector<int>sbj (m, 0);
    vector<int>days(m, 0);
    vector<int>res_e (m, 0);
    vector<int>res_l (m, 0);
    bool tag = true;
    for (int i = 0; i < m; i++) {
        cin >> sbj[i];
    }
    for (int i = 0; i < m; i++) {
        cin >> days[i];
    }
    for (int i = 0; i < m; i++) {
        if (sbj[i] == 0) {  //没有依赖其它科目
            res_e[i] = 1;
        }
        else { //依赖其它科目,需要计算被依赖科目的结束时间
            res_e[i] = res_e[sbj[i] - 1] + days[sbj[i] - 1];
        }
        if (res_e[i] + days[i] - 1 > n) { //判断是否有科目训练不完
            tag = false;
        }
    }
    for (int i = 0; i < m; i++) {  //输出最早开始时间
        cout << res_e[i] << " ";
    }
    if (tag) { //根据tag判断是否需要计算最晚开始时间
        for (int i = m - 1; i >= 0; i--) { //倒叙计算最晚开始时间
            int temp = INT_MAX;  //temp记录科目的边界:总天数 或 依赖给科目的科目的最晚开始时间
            if (i < m - 1) {
                for (int j = i + 1; j < m; j++) { //遍历后面的科目,判断当前科目是否被依赖
                    if (sbj[j] == i + 1) {  //如果存在依赖该科目的科目
                        temp = min(temp, res_l[j]);  //修改边界
                    }
                }
            }
            if (temp == INT_MAX) { //没有被依赖的科目
                res_l[i] = n - days[i] + 1;
            }
            else { //有被依赖的科目
                res_l[i] = temp - days[i];
            }
        }
        cout << endl;
        for (int i = 0; i < m; i++) { //输出最晚开始时间
            cout << res_l[i] << " ";
        }
    }
    return 0;

}

注意:

  1. 本题要注意判断本题直接最早开始是啊金本题要注意判断最晚开始时间是否需要计算。将最早开始时间和最晚开始时间的计算分开进行

  1. 计算最晚开始时间时,使用好”各个科目的依赖关系按顺序“的条件。

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
根据引用\[1\]和引用\[3\]的信息,我们可以得知顿顿需要在n天时间内完成m项科目的加强训练。每项科目有一个编号,编号为i,其中1≤i≤m。每项科目的训练时间为ti天,即从第a天开始训练科目i,训练将持续到第a+ti−1天。科目之间存在依赖关系,如果科目i依赖科目j,那么只能在科目j训练结束后,科目i才能开始训练。 对于csp202212-2题目中的c++训练计划,我们需要知道c++训练的编号以及训练的时间。根据题目描述,我们可以得知c++训练的编号为2。然而,题目中没有提供c++训练的具体时间。因此,我们无法确定c++训练的时间。 综上所述,我们无法确定c++训练的具体计划。 #### 引用[.reference_title] - *1* *3* [CCF CSP 202212-2 训练计划C++)](https://blog.csdn.net/qq_46092061/article/details/129207826)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [CCF-CSP真题《202212-2 训练计划》思路+python题解](https://blog.csdn.net/weixin_53919192/article/details/129084465)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Cris码码码

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值