我们将模型转换成有一个圆盘,圆盘上有n个位置,且有一个指针(初始时指针指向原 来的最后一个元素) 连续若干次操作1等价为改变指针指向的数所处的位置连续若干次操作,连续若干次操作2等价为改变指针的位置。容易观察到,我们只需要取环上最长的一个上升子序列,然后调整其它数,即可得到答案
上代码
#include<bits/stdc++.h>
using namespace std;
int n,q;
int a[505],dp[505];
int main()
{
int i,j,k,ans=1000000000;
cin>>n;
for(i=1;i<=n;i++)
cin>>a[i];
for(i=0;i<n;i++)
{
for(j=1;j<=n;j++)
{
dp[j]=1;
for(k=1;k<j;k++)
if(a[k]<a[j]) dp[j]=max(dp[k]+1,dp[j]);
ans=min(ans,n-dp[j]);
}
int t=a[1];
for(j=1;j<n;j++) a[j]=a[j+1];
a[n]=t;
}
cout<<ans;
return 0;
}