wing是什么_强制排序

wing是什么_强制排序给定 n 本书,编号为 1∼n。在初始状态下,书是任意排列的。在每一次操作中,可以抽取其中连续的一段,再把这段插入到其他某个位置。我们的目标状态是把书按照 1∼n 的顺序依次排列。求最少需要多少次操作。输入格式第一行包含整数 T,表示共有 T 组测试数据。每组数据包含两行,第一行为整数 n,表示书的数量。第二行为 n 个整数,表示 1∼n 的一种任意排列。同行数之间用空格隔开。输出格式每组数据输出一个最少操作次数。如果最少操作次数大于或等于 5 次,则输出 5 or more。每个

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

给定 n 本书,编号为 1∼n。

在初始状态下,书是任意排列的。

在每一次操作中,可以抽取其中连续的一段,再把这段插入到其他某个位置。

我们的目标状态是把书按照 1∼n 的顺序依次排列。

求最少需要多少次操作。

输入格式
第一行包含整数 T,表示共有 T 组测试数据。

每组数据包含两行,第一行为整数 n,表示书的数量。

第二行为 n 个整数,表示 1∼n 的一种任意排列。

同行数之间用空格隔开。

输出格式
每组数据输出一个最少操作次数。

如果最少操作次数大于或等于 5 次,则输出 5 or more。

每个结果占一行。

数据范围
1≤n≤15

输入样例:
3
6
1 3 4 6 2 5
5
5 4 3 2 1
10
6 8 5 3 4 7 2 9 1 10
输出样例:
2
3
5 or more

题解
IDA*,每一次变动都会改变3个数的后继,所以我们可以先统计每个数的后继,然后看看当前状态是否能达到要求。

  1. IDA*
#include<bits/stdc++.h>
using namespace std;
int n;
const int N = 1e2;
string t;
int f(){ 
   
    int tot = 0;
    for(int i = 1;i < n;i ++)
        if(t[i - 1] != t[i] - 1)tot ++;
    return (tot + 2) / 3;
}
bool IDAstar(int u,int maxn){ 
   
    if(f() > maxn - u)return false;
    if(u == maxn){ 
   
        return true;
    }
    string temp = t;
    for(int len = 1;len <= n - 1;len ++){ 
   
        for(int l = 0;l <= n - len;l ++){ 
   
            int r = l + len - 1;
            string substr = temp.substr(l,r - l + 1);
            for(int k = r + 1;k < n;k ++){ 
   
                t.insert(k + 1,substr);
                t.erase(l,r - l + 1);
                if(IDAstar(u + 1,maxn))return true;
                t = temp;
            }
        }
    }
    return false;
}
int a[N];
int main(){ 
   
    int T;
    cin>>T;
    while(T --){ 
   
        cin>>n;
        t = "";
        for(int i = 0;i < n;i ++){ 
   
            cin>>a[i];
        
            t += a[i];
        }
        int maxn = 0;
        while(maxn <= 4 && IDAstar(0,maxn) == false ){ 
   
            maxn ++;
        }
        if(maxn == 5){ 
   
            cout<<"5 or more"<<endl;
        }
        else cout<<maxn<<endl;
    }
    return 0;
}
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/168841.html原文链接:https://javaforall.net

赞 (0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • linux rsyslogd占用内存高_eventlog错误6008

    linux rsyslogd占用内存高_eventlog错误6008概述使用top命令查看内存占用时,发现rsyslogd内存占用很高。解决修改rsyslogd服务配置文件vim/usr/lib/systemd/system/rsyslog.service在Service配置中添加MemoryAccounting=yes,MemoryMax=80M,MemoryHigh=8M三项来限制服务内存使用率,如下所示[Unit]Description=SystemLo…

    2022年8月15日
  • 控制流和数据流的区别_jdk动态代理底层原理

    控制流和数据流的区别_jdk动态代理底层原理JBPM工作流原理

    2022年9月7日
  • fastclick

    fastclickfastclick–处理移动端click事件300毫秒延迟安装:npminstallfastclick–save   之后,在main.js中引入    importFastClickfrom’fastclick’    并绑定到bodyFastClick.attach(document.body);1、兼容性iOS3及更高版本的移动SafariiOS5及更高版本的C…

    2022年6月19日
  • STM32CubeMX入门使用一

    STM32CubeMX入门使用一一、安装好CubeMX这个度娘中一大把。二、打开CubeMX软件—————-安装支持包和HAL库说明文档1、安装需要的芯片型号的package支持包2、找到下载的目录三、新建工程(以STM32F103ZET6为例)1、新建工程2、双击上图‘2’处就自动跳转到配置界面如下:3、先配置系统SystemCode中的RCC和SYS(特别提醒:SYS-Debug这个一定选上,否则下载程序后会禁用仿真下载口,后面就不能用这个口仿真下载

    2022年5月9日
  • id门禁卡复制到手机_门禁卡复制到手机苹果

    id门禁卡复制到手机_门禁卡复制到手机苹果大家好,我是时间财富网智能客服时间君,上述问题将由我为大家进行解答。门禁卡复制到苹果手机的步骤如下:1、首先读取卡的ID,并安装“NFCTagInfo”,打开手机的NFC设置,门禁卡贴到手机后盖NFC部分,“NFCTagInfo”读取校园卡ID。可以看到“我的卡”ID号码。2、其次修改手机NFC的ID。随即打开R.E.管理器,根目录etc,找到etc文件夹中的“libnfc-nxp.conf”…

    2022年6月10日
  • 工作流入门教程(flowable框架)

    工作流入门教程(flowable框架)最近有一段时间没写博客了,本来打算写写对于工作流的心得,但是工作时间比较饱和只好延后。最初接触工作流是上一家公司工作,具体我不透露哪家公司,只是感受到人情冷暖,或许公司都是这样,当你的价值被用完了也就是你走人的时候。好了,废话不多说,我们直接进入主题。前言对于框架的选型,我推荐使用flowable框架,在最初的项目选型是选择activiti的,但是深入去了解框架的时候发现activiti还是有一些坑的,而flowable正是activiti框架的修正版,据了解flowable的背景是activiti原班

    2022年5月21日

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号