题目来源:HDU 5500
简单题目分析:
给一个1到n的乱序,每一次操作只能把一个数放到序列的最前端,求最小操作次数,使得序列有序。
思路:
思维题,从最大的数向前找,即从n开始向前找n-1,如果找到n-1,则继续向前找n-2,直到K这个数找不到为止,那么最少操作数就是K.
#include <iostream>
#include <cstdio>
#include <string.h>
using namespace std;
int temp[20];
bool flag;
int ans;
void findAns(int num,int index)
{
int i;
if(index==1)
{
ans=num-1;
flag=true;
}
else
{
for(i=index;i>=1;--i)
{
if(temp[i]==num-1)
findAns(num-1,i);
}
if(i==0&&!flag)
{
ans=num-1;
flag=true;
}
}
}
int main()
{
int T;
scanf("%d",&T);
while(T--)
{
flag=false;
int i,maxnum=-1,maxindex;
int n;
scanf("%d",&n);
for(i=1;i<=n;++i)
{
scanf("%d",&temp[i]);
if(temp[i]>maxnum)
{
maxnum=temp[i];
maxindex=i;
}
}
findAns(maxnum,maxindex);
printf("%d\n",ans);
}
return 0;
}