首先,说个很。。的事情,此题不用贪心
只需要模拟 我还一直再想样例怎么不是最优解。。
接下来,思考如何做?
核心思路,建议int类型 m(水龙头数量)个的数组
编写函数pd()判断是否存在为0(表示已经接水完毕,可以进行下一个),为0将下标存在cup变量中,将下一个进入的接水时间替换到数组为cup下标的内存;否则ans++(表示总用时增加),s的各个数据减一(注意>0才能减,等于0的就不需要了)。
函数如下:
int pd(){
for(int i=1;i<=m;i++){
if(s[i]==0){
cup=i;return 1;
}
}
return 0;
}
AC代码:
#include<bits/stdc++.h>
using namespace std;
int shuzu[10001],s[10001],ans,n,m,cup;
int pd(){
for(int i=1;i<=m;i++){
if(s[i]==0){
cup=i;return 1;
}
}
return 0;
}
bool cmp(int a,int b){
return a>b;
}
int main(){
cin>>n>>m;
for(int i=1;i<=m;i++){
cin>>shuzu[i];
s[i]=shuzu[i];
}
for(int i=m+1;i<=n;i++){
cin>>shuzu[i];
}
int lag=m+1;
while(lag<=n){
while(!pd()){
ans++;
for(int i=1;i<=m;i++){
if(s[i]>0)s[i]--;
}
}
s[cup]=shuzu[lag];
lag++;
}
sort(s+1,s+1+m,cmp);
ans+=s[1];
cout<<ans;
return 0;
}
原创不易,给个点赞~~