目前已知估价出错,但一直没瞪出来哪里错了
#include<bits/stdc++.h>
#define F(l,r,i) for(int i=l;i<=r;i++)
#define ll long long
#define M 20
using namespace std;
inline int read(){
int ans=0,w=1;
char ch=getchar();
while(!isdigit(ch)){
if(ch=='-') w=-1;
ch=getchar();
}
while(isdigit(ch)){
ans=(ans<<1)+(ans<<3)+ch-48;
ch=getchar();
}
return ans*w;
}
int n,Max,fl,cnt;
int a[M],tmp[M];
void dfs(int now,int eva,int step){
if(step==Max){
if(!eva) fl=1;
return ;
}
int temp;
for(int i=2;i<=n;i++){
if(i==now) continue;
if(abs(a[i+1]-a[i])==1) continue;
temp=eva;
//cout<<now<<' '<<step<<' '<<i<<' '<<eva<<endl;
reverse(a+1,a+1+i);
if(abs(a[i]-a[i+1])==1) temp=eva-1;
if(temp+step<=Max){
dfs(i,temp,step+1);
if(fl) return ;
}
reverse(a+1,a+1+i);
}
}
int main(){
n=read();
F(1,n,i) a[i]=read(),tmp[i]=a[i];
sort(tmp+1,tmp+1+n);
for(int i=1;i<=n;i++)
a[i]=lower_bound(tmp+1,tmp+1+n,a[i])-tmp;
// for(int i=1;i<=n;i++) cout<<a[i]<<' ';
// cout<<endl;
while(1){
cnt=0;
for(int i=1;i<=n;i++){
if(abs(a[i]-a[i+1])!=1) cnt++,cout<<i<<' ';
}
cout<<cnt<<endl;
dfs(1,cnt,0);
if(fl){
cout<<Max;
break;
}
Max++;
}
return 0;
}