1 条题解
-
0
问题描述
给定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
- 上传者