题目链接:
1.luogu
2.codeforces

这道题就是一道贪心的题目。本人打比赛时做了半天(原因竟是本人竟然挖地洞了)
挖地洞的代码(WA):https://www.luogu.org/paste/axeqr2s6
由于CF的输入是%I64d,不是%lld,所以本人也就不改回%lld了
给出正确代码(AC):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#include<bits/stdc++.h>
using namespace std;
int t;
long long n,m,k;
long long h[110];
bool g;
int main() {
scanf("%d",&t);
while(t--) {
scanf("%I64d%I64d%I64d",&n,&m,&k);
for(int i=1;i<=n;i++)
scanf("%I64d",&h[i]);
g=true;
for(int i=2;i<=n;i++) {
if(h[i-1]+m+k<h[i]) { //把我口袋中的所有东西都给你了还不够
cout<<"NO\n"; //那就只能直接输出NO了
g=false;
break;
}
if(h[i-1]+k<h[i]) {
m-=(h[i]-h[i-1]-k);b //若是不够,就把口袋里的东西尽可能少的给他,使他通过本关
}
else {
m+=h[i-1]-max(h[i]-k,(long long)0); //防止挖地洞,需要判断是否<0,若<0就直接去0
}
}
if(g) printf("YES\n");
}
return 0;
}