本文主要是介绍Before an Exam,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
题目名字 Before an Exam
题目链接
题意
给定天数和目标,然后接下来输入每天的最少时间和最多时间,先判断在每天的范围内能否完成目标,如果不能输出no,如果能就输出每天在给定范围内完成的时间
思路
- 先用maxsum来将每天的最大时间相加,minsum将每天最少的时间相加,判断maxsum是否小于sumtime且minsum是否大于sumtime,如果是输出no,不是就输出yes然后继续判断
- 先用sumtime减掉minsum,判断剩余的sumtime是否小于范围的差值,如果大于,就使这天的学习最小量变为最大学习量,为了后面的输出,继续判断,直到sumtime小于两个之间的差值,然后使这天的mintime加等于这个sumtime
3.最后循环输出d天的mintime;
算法一:贪心
代码
#include <bits/stdc++.h>
using namespace std;
int main() { int d,sumtime; cin>>d>>sumtime; int mintime[d], maxtime[d]; int maxsum=0,minsum=0,temp=0; for (int i=0;i<d;i++){ scanf("%d %d",&mintime[i],&maxtime[i]); maxsum+=maxtime[i]; minsum+=mintime[i]; } if(maxsum<sumtime||minsum>sumtime){ cout<<"NO"<<endl; return 0; } else{ cout<<"YES"<<endl; sumtime-=minsum; int i=0;while(sumtime){if(sumtime>maxtime[i]-mintime[i]){ sumtime-=maxtime[i]-mintime[i]; mintime[i]=maxtime[i]; } else{ mintime[i]+=sumtime;sumtime=0;} i++;}for (int i=0;i<d;i++){cout<<mintime[i]<<" ";} } return 0;
}
这篇关于Before an Exam的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!