Rabbits
这道题是一道典型的贪心算法
比赛的时候没有发现
主要还是题意理解有误
如果出现样例 1 3 6 9 这种样例,如果每次选择一只兔子,那么
可以无限跳跃,无限玩下去
但是题目上说必须选两边的,我原本以为这个两边是相对的
对于6来说,3和9算是两边的
但是题意不是这样的,虽然说的不是很清楚
对于所有的数来说,1和9才能算两边
那么这道题的贪心策略是
对于第一次跳跃,我肯定要拿离团体最近的那个两边
然后跳跃的位置为旁边兔子的旁边
比如 1 3 6 9
先拿1 跳跃到 位置4 ,样例变为 3 4 6 9
然后 3跳到5的位置····这样挨着跳,可以不浪费空间,尽量多跳
然后跳到 4 5 6 9
再用4跳到7
这样就会发现,每跳一次只减少一个空位
那么把几只兔子所有的中间空位加起来
进去刚开始第一只兔子隔掉的,那么就是可以玩几次
#include<bits/stdc++.h>
using namespace std;
int num[510],sum[510];
int main()
{
int T;
scanf("%d",&T);
while(T--)
{
int n;
scanf("%d",&n);
int len=0;
for(int i=1;i<=n;i++)
{
scanf("%d",&num[i]);
}
for(int i=1;i<n;i++)
{
sum[i]=num[i+1]-num[i]-1;
len+=sum[i];
}
int ans=min(sum[1],sum[n-1]);
printf("%d\n",len-ans);
}
}