Before an Exam
2023-12-16 17:39:54
题目名字 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;
}
文章来源:https://blog.csdn.net/CocowhoLynn/article/details/135033527
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!