UVa 11212 Editing a Book

HAL库STM32CubeMX+DHT11温湿度传感器模块化驱动与OLED显示实战 本文详细介绍了基于HAL库和STM32CubeMX开发DHT11温湿度传感器模块化驱动的实战过程。通过精确的时序控制和模块化封装,实现了传感器数据采集,并结合OLED显示模块实时展示温湿度信息,为嵌入式开发者提供了完整的解决方案。 阅读详情

黑书P207 例题

IDA* 搜索,估价函数设计得很经典。

#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
class Board
{
public:
    int a[16];
    int h;
    int n;
    bool readIn()
    {
        int i;
        scanf("%d",&n);
        if (n == 0)
            return false;
        for (i=0; i<n; i++)
        {
            scanf("%d",a+i);
        }
        return true;
    }
    void printOut()
    {
        int i;
        for (i=0; i<n; i++)
        {
            printf("%d ", a[i]);
        }
        printf("\n");
        printf("h=%d\n",h);
    }
    void move(int s,int e,int p)
    {
        int t[16],i,j;
        if (p < s)
        {
            for (i=0; i<p; i++)
            {
                t[i]=a[i];
            }
            for (j=s; j<=e; j++,i++)
            {
                t[i]=a[j];
            }
            for (j=p; j<s; j++,i++)
            {
                t[i]=a[j];
            }
            for (j=e+1; j<n; j++,i++)
            {
                t[i]=a[j];
            }
        }
        else
        {
            for (i=0; i<s; i++)
            {
                t[i]=a[i];
            }
            for (j=e+1; j<p; j++,i++)
            {
                t[i]=a[j];
            }
            for (j=s; j<=e; j++,i++)
            {
                t[i]=a[j];
            }
            for (j=p; j<n; j++,i++)
            {
                t[i]=a[j];
            }
        }
        memcpy(a,t,sizeof(t));
    }
    int getH()
    {
        int cnt,i;
        cnt=0;
        for (i=0; i<n-1; i++)
        {
            if (a[i+1] != a[i]+1)
              cnt++;
        }
        if (a[i] != n)
            cnt++;
        h=cnt;
        return cnt;
    }
};
int lim;
int f(int dep,int h)
{
    return dep*3+h;
}
bool IDDFS(int dep,Board b)
{
    int i,j,k;
    Board tb;
    b.getH();
   /* printf("%d %d\n",dep,lim);
    b.printOut();
    getchar();
*/
    if (f(dep,b.h) > lim*3)
        return false;
    if (b.getH() == 0)
        return true;
    for (i=0; i<b.n; i++)
    {
        for (j=i; j<b.n; j++)
        {
            for (k=0; k<i; k++)
            {
                tb=b;
                tb.move(i,j,k);
                if (IDDFS(dep+1,tb) == true)
                    return true;
            }
            for (k=j+2; k<b.n; k++)
            {
                tb=b;
                tb.move(i,j,k);
                if (IDDFS(dep+1,tb) == true)
                    return true;
            }
        }
    }
    return false;
}
int main()
{
    Board b;
    int prob;
    prob=1;
    while (b.readIn() == true)
    {
        for (lim=0; ; lim++)
        {
            if (IDDFS(0,b) == true)
                break;
        }
        printf("Case %d: %d\n",prob,lim);
        prob++;
    }
}


玩转 Milvus(二):在 Ubuntu 22.04(WSL2)上安装 Milvus 本文详细介绍了在Ubuntu 22.04(WSL2)环境下安装Milvus向量数据库的两种单机模式:Milvus Lite和Milvus Standalone。Milvus Lite作为轻量级Python库,适合快速学习和小规模实验,只需通过pip安装即可使用。Milvus Standalone则支持Docker和Docker Compose两种部署方式,适合开发测试或小规模生产环境。文章对比了不同安装方式的优缺点,并提供了验证案例和常见问题解答,帮助开发者快速上手,实现简单的语义搜索功能。 阅读详情

相关推荐

硬核拆解华为/大疆/小米硬件面试真题:手撕电路+考点思维导图(附答案)

设计一个增益为20dB、带宽≥100kHz的同相放大器,电源电压±5V,要求输出摆幅≥8V。12位ADC的参考电压2.5V,输入信号1kHz正弦波,峰峰值2V。输入24V转5V/10A的同步降压电路,开关频率500kHz,计算MOSFET的损耗并选择型号(需提供TI官网截图)。设计无人机图传系统,要求1080P@30fps,传输距离2km。FPGA设计中,100MHz时钟域到50MHz时钟域传输32位数据,给出同步方案并画时序图。“设计一个输入12V、输出5V/3A的同步降压电路,给出关键参数计算”

qq_63103361的博客 3538

UVA11212 Editing a Book(编辑书稿)

UVA11212 Editing a Book 题目链接 这道题有一定的难度,参考了一些大佬的代码,在这里写一篇题解巩固一下。 问题分析 首先,本题采用IDA*算法求解,参考紫皮书上的解释,这道题启发函数的求解是解题的一个关键。 其次是三个加速的策略: 1.每次只剪切一段连续的数字。 2.假设剪切片段的第一个数字为a,最后一个数字为b,这个片段要么粘贴到a-1下一个位置,要么粘贴到b+1的前一个位置。 3.已经排好序的数字不要分开剪切,始终看做一个整体。 (以上解释纯属搬书,下面结合代码具体分析) 最后,启

polarday的博客 415

IATF16949核心职位全解析

TM / Top MgmtMR / QMRProcess OwnerQMQAQCSQECQEPQEPETEMEIEPM / PJMFMEA ModeratorMSA CoordinatorSPC CoordinatorCM / CCB内审员CP / CPK

weixin_49938552的博客 973

Editing a Book UVA - 11212

题目传送门题意:给你一串n个数字,你可以对其中的一些连续片段进行剪切和粘贴的操作,然后用最小的步数使得这个序列变为1-n排列。思路:这个题目就是对于DFS进行大量的剪枝的操作,一组序列最多进行八次操作就可以让其变为目标的序列,然后如果对于一个片段进行操作的话,最多能减少一个序列当中的三个错误,我们根据这个地方进行剪枝,可以大大减少时间的复杂度。剩下的部分枚举就好了。#include <algorit

且听风吟 332

「分治法」最近点对距离问题

一、问题描述 给定平面S上n个点,找其中的一对点,使得在n个点组成的 所有点对中,该点对间的距离最小。 假设所讨论的点是以标准笛卡儿坐标形式(x, y)给出的。因 此,在两个点Pi =(xi , yi )和Pj =(xj , yj )之间的距离是标准的欧几里德 距离: d = 根号下( x i − x j ) 2 + ( y i − y j )2 二、问题分析 直接用暴力解法很简单,用结构体把每个点的x、y坐标都存下来之后,用一个二重循环即可获得距离的最大值。但是这样做的时间复杂度也达到了O(n的平方)

Laok0413的博客 9656

超分算法 SwinIR: Image Restoration Using Swin Transformer

这篇文章结构比较简单,如果看过Swin-Transformer的话就没什么难点了。作者引入Swin-T结构应用于低级视觉任务,包括图像超分辨率重建、图像去噪、图像压缩伪影去除。网络由一个浅层特征提取模块、深层特征提取模块、重建模块构成。重建模块对不同的任务使用不同的结构。浅层特征提取就是一个3×3的卷积层。深层特征提取是k个RSTB块和一个卷积层构成。RSTB(Res- SwinIR: Image Restoration Using Swin Transformer[ICCV 2021]Abstract1.

qq_45122568的博客 1万+

UVa11212 编辑书稿(Editing a book)

题目链接:https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=841&page=show_problem&problem=2153 题意:你有一篇n(2≤n≤9)个自然段组成的文章,希望将它们排列成1,2,…,n。可以用Ctrl+X(剪切)和Ctrl+V(粘贴)快捷键来完成任务。每次

Frade's Blog 2555

层层剥开Allegro skill--快速抓取并写入Allegro软件【呕血创作,转载注明】

Allegro skill eda pcb

qq_36492361的博客 1255

UVA11212 Editing a Book (IDA*)

对于可以用回溯法求解但解答树的深度没有明显上限的题目,可以考虑用迭代加深搜索(iterative deepening)。如果设计出以一个乐观估价函数,预测从当前结点至少还要扩展基层结点才能得到解,则迭代加神搜索编程了IDA*算法。——《算法竞赛入门经典》p207 讲真看书里第一个埃及分数问题,看得我是一脸懵逼。感觉好像是这么个道理,但是没懂到底什么意思。接着就跳过先看了下面那道例题,也就是Edi

JasonWu的博客 296

【OpenClaw从入门到精通】第41篇:2026年4月最新版——从零开始搭建你的第一个安全AI助理(保姆级实战教程)

2026年3月CNCERT联合发布《OpenClaw安全使用实践指南》后,安全部署成为OpenClaw使用的核心前提。本文针对新手及进阶用户,基于官方安全指引,提供三套实战部署方案:阿里云一键部署(新手首选)、Docker容器隔离部署(进阶推荐)、本地安全安装(测试专用),并详解阿里云百炼Coding Plan API接入流程。全文涵盖环境准备、分步实操、安全加固、问题排查等全流程,所有命令可直接复制执行,无需依赖外部代码库。通过本文,读者可零基础搭建安全隔离的OpenClaw AI助理,兼顾实用性与安全性

专注于人工智能、软件开发、工控自动化、工厂数字化及智能化等领域,希望和大家共同进步! 2200

基于YOLOv11的水果/商品/食堂/蔬菜/饮料/书籍识别与计价系统,前台+后台管理系统

基于YOLOv11的水果/商品/食堂/蔬菜/饮料/书籍识别与计价系统,前台+后台管理系统

在职AI算法工程师,擅长计算机视觉,YOLO目标检测、分割等,擅长web、pyqt界面可视化,好内容持续更新中,来这里跟大家一起学习,共同进步 1220

编辑书稿(Editing a Book, UVa 11212)迭代加深搜索

题目:https://vjudge.net/problem/UVA-11212 分析:本题可以用IDA*算法求解。不难发现n≤9时最多只需要8步,因此深度上限为8。IDA*的关键在于启发函数。考虑后继不正确的数字个数h,可以证明每次剪切时h最多减少3,因此当3d+h&gt;3maxd时可以剪枝,其中d为当前深度,maxd为深度限制(3)。如何证明每次剪切时h最多减少3呢? 如图7-19所示...

Nicolas的博客 533

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

UVa11212 Editing a Book

本文介绍了UVa11212 Editing a Book题目,要求通过剪切粘贴操作将文章段落排列成升序。题目分析指出可使用IDA*算法求解,其中关键启发函数考虑后继不正确的数字个数h,证明每次操作h最多减少3。给出了两个加速策略:避免破坏已连续片段,以及优化粘贴位置选择。代码实现了该算法,通过迭代加深搜索找到最少操作次数。对于n≤9的情况,最多需要8步即可完成。

hlhgzx的博客 664

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

uva 11212 UVa11212 Editing a Book

此题题目意思很简单:就是问最少的可以剪切和粘贴的次数。 但是实现起来确实是很麻烦,主要是思路不清晰 此题加深了我对迭代加深搜索的理解  同时其中剪枝是非常难以想到的。 借用刘汝佳先生书上所说:此题采用迭代加深搜索,下面是刘汝佳先生的代码 // UVa11212 Editing a Book// Rujia Liu // This implementation is not very

最爱她! 555

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

UVA 11212 Editing a Book 【IDA*】

题目链接 题意 给一个n个数的全排列,可以进行将任意连续的一段截下来插入到任意位置的操作,问至少需要多少步这样的操作能够是序列变成递增的序列。 分析 题中n的最大值为9,状态数为9的阶乘,不过1e6左右,看似可以直接BFS。但是每一种状态后的决策数量太多了(任意位置的任意长度再插入到任意位置) 考虑到n个数的全排列,要使之恢复递增的顺序,最多移动n-...

a18235146924的博客 118

UVA 11212 Editing a Book(IDA*)

【题目链接】UVA-11212 【题意】给一串长度为n的数字序列(n 【样例】 Sample Input 6 2 4 1 5 3 6 5 3 4 5 1 2 0 Sample Output Case 1: 2 Case 2: 1 【分析】        做的第一道IDA*。        当然应该考虑一下为什么不得不走向IDA*。        首先考虑单纯的dfs:

No Rain,No L'Arc~en~Ciel 390

迭代加深搜索算法总结 + Editing a Book UVa11212题解

迭代加深搜索算法: 对于可以用回溯法解决,但是解答树结点数大的恐怖的问题的一种解决办法,有的问题甚至用bfs连一层节点都遍历不完就超时了。具体方法就是依次枚举搜索层数,从1到一个上限。 结构: int solve() {   for (int maxd = 1; maxd < MAXN; maxd++) {     if (dfs(0, maxd)) retu...

weixin_34318272的博客 187

UVa OJ 11212 - Editing a Book

UVa OJ 11212 - Editing a Book(IDA*)Problem  你有一篇由n(2≤n≤9)个自然段组成的文章,希望将它们排列成1, 2,…, n。可以用 Ctrl+X(剪切)和Ctrl+V(粘贴)快捷键来完成任务。每次可以剪切一段连续的自然段,粘贴时按照顺序粘贴。注意,剪贴板只有一个,所以不能连续剪切两次,只能剪切和粘贴交替。   例如,为了将{2,4,1,5,3,6}变为

Yuuki_Dach's Blog 437

Editing a Book(UVA - 11212)

实际上我的代码还有一些地方可以优化,比如对同一个Node指针用shrink用了很多次,可以改成一次。这题我用迭代加深搜索(iterative deepening)来做的,今天刚学的这玩意,现学现用。顺带一提,虽然说是剪切之后粘贴,但是实际上一次剪切+一次粘贴 = 两个相邻的片段交换位置。我的Node结点把连成串的数字变成一个整体,这样在搜索的时候就不会让原来的链变得更乱了。当Node结点只有一个的时候,说明只有一个串了,答案出来了。因为h一次最大减少3个,所以可以根据这个剪枝。maxd:最大的搜索深度。

Fool256353的博客 253

[算法竞赛入门经典] UVa11212 Editing a Book 完全注释

1. d为当前深度,maxd为深度限制,因为每次剪切时h最多减少3,所以 时剪枝 的意思是消除h个后继不正确的数字,至少需要步 2. 为何h每次剪切最多减少3 // https://github.com/aoapc-book/aoapc-bac2nd/blob/master/ch7/UVa11212.cpp // UVa11212 Editing a Book // Rujia...

Lord_sh的博客 356

uva 11212 Editing a Book

题目:Editing a Book 题意:有一本有n段的书,段的编号为1~n,段的顺序是乱的。有“剪切”和“粘贴”的两种操作,问至少要用多少组剪切和粘贴才能把顺序调整正确。 思路: IDA*。 估价函数为:h>3*(maxd-d)。h代表前后不匹配 (如果a[i]-a[i-1]==1,那么i与i-1匹配) 的段的个数。由于每次操作h最多加大3 (如书上图,假设a的最后一个数

iwi 424

UVA11212 Editing a Book

解析 详细可以查看lrj书。本题题解出自刘汝佳算法竞赛入门经典 本题可以用IDA*算法求解。不难发现n≤9时最多只需要8步,因此深度上限为8。IDA*的关键在于启发函数。考虑后继不正确的数字个数h,可以证明每次剪切时h最多减少3,因此当3d+h&gt;3maxd时可以剪枝,其中d为当前深度,maxd为深度限制 (3) 。如何证明每次剪切时h最多减少3呢?如图7-19所示,因为最多只有3个数...

徐伯莱 314

UVa 11212 编辑书稿(Editing a Book)

题目: 你有一篇由n个自然段组成的文章,希望将他们排列成1,2,3 ……, n 可以用剪切和粘贴键完成任务,每次可以剪切一个连续的自然段,粘贴时按照顺序粘贴。注意剪切板只有一个,所以不能连续剪切。 要点: 看刘汝佳的,没什么想说的,自己用刘汝佳的思路实现了一遍。 主要是启发函数 以及 搜索与回溯。 IDA* #include<bits/stdc++.h> #define LL l...

Inuyasha__的博客 246

Editing a Book UVA - 11212(IDA*)

题意 给你一个序列,每次可以复制和黏贴一段子序列,问你至少经过多少次操作可以将序列变成有序的 思路 考虑IDA*,我们考虑一个序列最多是操作8步可以将序列变成有序,所以这个是我们的迭代上界,定义后继不正确的数字个数为h, 每一次操作最多是改变3个数字的后缀,所以当h>3*(maxd-d)时剪枝,maxd为当前的最大操作数,d为当前的操作数,这表示我们执行完所有的操作,并且每次操作都是...

leekerian的博客 276
上一篇: POJ 3856 deltree
下一篇: LA 3618 Cubic Eight-Puzzle
plusplus7
博客等级 码龄15年 59粉丝 173原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值