题目链接:https://www.luogu.org/problemnew/show/P1190
思路:
1.用a[n]
保存这些人的接水量,用s[m]
保存这些水龙头需要出水的量,先把a[n]
中0
到m-1
赋到s[m]
中。
2.每次循环找到现在接水的最小值,把a[n]
中下一个赋给它,例如s[m]
现在是4、4、2
,a[n
]是4、4、2、1
,那就把1即‘a[3]’
赋到2即‘s[2]’
上。
3.最后s[m]
中的最大值就是所需时间。
代码如下:
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>
using namespace std;
int a[10005],s[105]={0};
int n,m;
int main(){
scanf("%d %d",&n,&m);
for(int i=0;i<n;i++){
scanf("%d",&a[i]);
}
for(int i=0;i<m;i++)
s[i]=a[i];
int min;
int c;
for(int k,j=m;j<n;j++){//这两个循环是核心代码
min=10000000;//坑点,最后的接水量可能很大
for(k=0;k<m;k++){
if(s[k]<min){
min=s[k];
c=k;
}
}
s[c]+=a[j];
}
int max=0;
for(int i=0;i<m;i++){
if(s[i]>max)
max=s[i];
}
printf("%d\n",max);
return 0;
}
总结:善于思考才能发现破题之路