原来错一道题可能不止错在少剪枝,还可能这压根就不是搜索题
题目传送门
第一反应:这不每个点左搜一遍右搜一遍然后比大小吗
点击查看search
#include<iostream>
#include<cstdio>
#include<cmath>
#include<algorithm>
using namespace std;
int n,a[10010],ansl=1e6,ansr=1e6,ans=1e6;
void search_left(int k,int now,int s)
{
for(int i=now-1;i>=1;i--)
{
if(a[now]>a[i]) search_left(k+1,i,s);
++s;
++k;
}
if(s<ansl) ansl=s;
}
void search_right(int k,int now,int s)
{
for(int i=now+1;i<=n;i++)
{
if(a[now]>a[i]) search_right(k+1,i,s);
++s;
++k;
}
if(s<ansr) ansr=s;
}
int main()
{
scanf("%d",&n);
for(int i=1;i<=n;i++)
{
scanf("%d",&a[i]);
}
for(int i=2;i<=n;i++)
{
ansl=1e6;
ansr=1e6;
search_left(1,i,0);
search_right(1,i,0);
if(ansl+ansr<ans) ans=ansl+ansr;
}
printf("%d",ans);
return 0;
}
然后就光荣地T掉了两个点,由于是在不知道怎么减,就去翻题解
但可怕的是上来都是动规/单调队列
终于有一位dfs的,他竟然说:减不掉
于是我放弃了 改道动规