題目:有一個梯子,從0層(地上)跳到頂上,梯子上面有一些位置要經過, 設置一個步長k層,
每次跳躍可以是k層或者是小於k的層數,如果跳了k層,則k就減少1,求最小的k。
分析:模擬,貪心。直接逆向求解,每次遇到更大的或者相同的更新即可。
說明:╮(╯▽╰)╭。
#include <cstring>
#include <cstdio>
int r[100001] = {0};
int main()
{
int T, n;
while (~scanf("%d",&T))
for (int t = 1; t <= T; ++ t) {
scanf("%d",&n);
for (int i = 1; i <= n; ++ i) {
scanf("%d",&r[i]);
}
int ans = r[n]-r[n-1];
for (int i = n-1; i > 0; -- i) {
if (ans < r[i]-r[i-1]) {
ans = r[i]-r[i-1];
}else if (ans == r[i]-r[i-1]) {
ans = r[i]-r[i-1]+1;
}
}
printf("Case %d: %d\n",t,ans);
}
return 0;
}