贪心有一个出发点:分清什么是必须要的,什么是能贪的。这样思考能简化一些题目
如 FishingMaster
这道题我想了很久,一直在做分类讨论,题目就搞得很复杂。其实我们仔细观察,就会发现,无论如何,捕第一条鱼的时间是必须的,煮鱼的时间是必须的,在这方向上,我们再判断是否需要加上额外的捕鱼时间(煮鱼时间很短),也就想到了对煮鱼之后抓鱼之前的空闲时间排序,答案也就有了
#include <cstdio>
#include <algorithm>
using namespace std;
using LL = long long;
const int MAX_N=1e5+10;
int a[MAX_N];
int n,k;
void solve(){
LL cnt = 1,ans = k;
for(int i=1;i<=n;i++){
cnt += a[i] / k;
ans += a[i];
a[i] %= k;
}
sort(a+1,a+1+n);
if(cnt >= n){
printf("%lld\n",ans);
return ;
}
for(int i = n; i >= cnt+1 ;i--) ans += (k-a[i]);
printf("%lld\n",ans);
}
int main(){
int t;
scanf("%d",&t);
while(t--){
scanf("%d%d",&n,&k);
for(int i=1;i<=n;i++) scanf("%d",&a[i]);
solve();
}
return 0;
}
c++知识点
对于某一指针连用两次delete,第二次会特别慢,可能造成tle(环境:devc++)