• BZOJ2824: [AHOI2012]铁盘整理


    显然到最终状态有一个下界,即为当前状态下,在最终状态中不相邻的相邻个数。

    再加一些奇怪的剪枝就可以过了。另外这个题加强数据的题有剧毒。

    #include <bits/stdc++.h>
    using namespace std;
    int b[60], a[60];
    int pre, Ans;
    int n;
    int lim;
    inline int check() {
        int ret = 0;
        for(int i = 1; i < n; ++ i) {
            if(abs(a[i] - a[i + 1]) != 1) ++ ret;
        }
        return ret + (a[n] != n);
    }
    inline void dfs(int now) {
        if(check() + now > lim) return;
        if(now == lim) {
            for(int i = 1; i <= n; ++ i) if(a[i] != i) return;
            printf("%d
    ", lim);
            exit(0);
        }
        for(int i = 2; i <= n; ++ i) if(a[i + 1] - a[i] != 1) {
            for(int j = 1; j <= i / 2; ++ j) {
                swap(a[j], a[i - j + 1]);
            }
            dfs(now + 1);
            for(int j = 1; j <= i / 2; ++ j) {
                swap(a[j], a[i - j + 1]);
            }
        }
    }
    int main() {
        scanf("%d", &n);
        for(int i = 1; i <= n; ++ i) {
            scanf("%d", &b[i]);
        }
        for(int i = 1; i <= n; ++ i) {
            for(int j = 1; j <= n; ++ j) {
                if(b[j] <= b[i]) ++ a[i];
            }
        }
        Ans = 2 * n - 2;
        for(lim = 1; lim <= 2 * n - 2; ++ lim) {
            dfs(0);
        }
    }
  • 相关阅读:
    牛客(28)数组中出现次数超过一半的数字
    牛客(27)字符串的排列
    2、Spring Cloud和dubbo简介
    1、微服务简介
    12、Spring Boot监控
    11、Spring Boot热部署
    10、Spring Boot分布式
    9、Spring Boot安全
    8、Spring Boot任务
    7、Spring Boot检索
  • 原文地址:https://www.cnblogs.com/iamqzh233/p/9427187.html
Copyright © 2020-2023  润新知