1 条题解

  • 0
    @ 2025-5-26 17:08:28

    问题描述
    给定N个任务,每个任务初始需要a[i]天完成。每一天结束后,所有未完成的任务所需时间减少1天。同时,存在一个限制L,即任何任务的剩余时间不能超过L天(如果超过则取模L)。你可以选择在第0天到第L天之间的任意一天开始执行这些任务,目标是找到开始执行任务的最佳日期,使得所有任务的总执行时间最短。输出这个最佳开始日期。

    代码解释

    #include<iostream>
    using namespace std;
    int main()
    {
      int a[30010],b[30010],L,N,i,j;
      while(scanf("%d%d",&N,&L)!=EOF)
      {
        for(i=0;i<N;i++)
          scanf("%d",&a[i]);
          int sum=0,year;
          int max=100000;  // 初始化最小总和为一个较大值
          for(j=0;j<=L;j++)  // 遍历所有可能的开始日期
          {
            sum=0;
            for(i=0;i<N;i++)
            {
              // 计算任务i在第j天开始时的剩余时间
              b[i]=L>a[i]?a[i]:a[i]%L;
              sum+=b[i];
              a[i]++;  // 每天任务所需时间增加1(原题可能描述为每天减少,但代码实现是增加)
            }
            if(sum<max)  {max=sum;year=j;}  // 更新最小总和及对应的开始日期
          }
          printf("%d\n",year);
      }
    }
    
    • 1

    信息

    ID
    2428
    时间
    1000ms
    内存
    256MiB
    难度
    10
    标签
    递交数
    2
    已通过
    1
    上传者