稍作思考,一次multi-drop操作可以将序列中任意一个数字转移到任意位置,自然可以想到要求需要转移的数字个数,即用原序列的长度减去最长上升子序列的长度,此处的代码复杂度为
可以用二分优化为
由于我巨弱就不打了
#include #include using namespace std; int a[510]; int dp[510]; int ans; int main() { int n; cin>>n; for(int i=1;i<=n;i++) cin>>a[i]; for(int k=1;k<=n;k++) { for(int i=1;i<=n;i++) { dp[i]=1; for(int j=1;j<i;j++) { if(a[i]>a[j]) { dp[i]=max(dp[j]+1,dp[i]); ans=max(ans,dp[i]); } } } int t=a[1]; for(int i=1;i<n;i++)a[i]=a[i+1]; a[n]=t; } cout<<n-ans; }