P1091 [NOIP2004 提高组] 合唱队形

原来错一道题可能不止错在少剪枝,还可能这压根就不是搜索题
题目传送门
第一反应:这不每个点左搜一遍右搜一遍然后比大小吗

点击查看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的,他竟然说:减不掉
于是我放弃了 改道动规

上一篇:Rust 将列表内容写出到文件


下一篇:C++代码破解曹瞒走华容道(广搜、状态压缩、二叉排序树)