cz
查看原帖
cz
477676
crosaa楼主2021/9/24 22:19
#include<iostream>
#include<cstdio>
using namespace std;
inline int read()
{
	int x=0,f=1;
	char ch=getchar();
	while(ch<'0'||ch>'9'){ if(ch=='-') f=-1;ch=getchar(); }
	while(ch>='0'&&ch<='9'){ x=(x<<1)+(x<<3)+ch-'0';ch=getchar(); }
	return x*f;
}
const int Maxn=3e2+5;
int n,ans=-1e9;
int v[Maxn],a[Maxn];
inline void dfs(int x,int score)
{
	ans=max(ans,score);
	if(x==n)
	{
		return;
	}
	else
	{
		for(int i=1;i<=a[0];i++)
		{
			for(int j=i;j<=a[0];j++)
			{
				bool f=1;
				int tmp[Maxn];
				for(int k=0;k<=a[0];k++) tmp[k]=a[k];
				for(int k=i+1;k<=j;k++)
				{
					if(a[k]-a[k-1]!=1)
					{
						f=0;break;
					}
				}
				for(int k=i+1;k<=j-1;k++)
				{
					if(a[k]<=a[k+1]&&a[k]<=a[k-1])
					{
						f=0;break;
					}
				}
				if(f==0) continue;
				a[0]=0;
				for(int k=1;k<i;k++) a[++a[0]]=tmp[k];
				for(int k=j+1;k<=tmp[0];k++) a[++a[0]]=tmp[k];
				dfs(x+j-i+1,score+v[j-i+1]);
				for(int k=0;k<=tmp[0];k++) a[k]=tmp[k];
			}
		}
	}
}
int main()
{
	n=read();
	for(int i=1;i<=n;i++) v[i]=read();
	for(int i=1;i<=n;i++) a[i]=read();
	a[0]=n;
	dfs(0,0);
	if(ans==0) printf("3");
	else printf("%d",ans);
	
	
	
	return 0;
}
2021/9/24 22:19
加载中...