求调
查看原帖
求调
769006
crzcqh楼主2024/3/25 21:37

目前已知估价出错,但一直没瞪出来哪里错了

#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;
}


2024/3/25 21:37
加载中...