[BZOJ1562]NOI2009变换序列|二分图匹配

本文探讨了如何通过优化字典序和改进匹配策略来解决二分图匹配问题,避免了多次尝试和失败。重点介绍了在实际应用中如何构建有效的边表,并采用逆序匹配技巧提高解决方案的效率。

    一开始看错题以为是个傻逼的模拟。。不过也是个二分图匹配,但是我挂了好几次。。

    可以弄出每个位置可以放的两个数,然后可以建出二分图。。不过要满足字典序最小,我一开始是边表按to从小到大放,顺序匹配,发现好像不行。。看了网上的说要倒序匹配,想一想也是,如果有解的话后匹配的点其实是优先满足的。。

#include<iostream>
#include<cstdio>
#define N 10005
using namespace std;
int n,i,j,ne=0,m1,m2,t[N],u[N],a[N][2],pre[N],to[N];
bool find(int x,int tim)
{
    for (int i=0;i<=1;i++)
        if (u[a[x][i]]>tim) 
        {
            u[a[x][i]]=tim;
            if (pre[a[x][i]]==0||find(pre[a[x][i]]-1,tim))
            {
                pre[a[x][i]]=x+1;to[x]=a[x][i];
                return true;
            }
        }
    return false;
}
int hungary(int n)
{
    for (i=n-1;i>=0;i--)
        if (!find(i,i)) return i;
    return n;
}
int main()
{
	freopen("1562.in","r",stdin);
    scanf("%d",&n);
    for (i=0;i<n;i++) u[i]=n,pre[i]=0;
    for (i=0;i<n;i++) 
    {
        scanf("%d",&t[i]);
        m1=(i+t[i])%n;m2=(i-t[i]+n)%n;
        if (m1>m2) swap(m1,m2);
        a[i][0]=m1;a[i][1]=m2;
    }
    int ans=hungary(n);
    if (ans==n)
    {
        for (i=0;i<n-1;i++) printf("%d ",to[i]);printf("%d",to[n-1]);
    }
    else printf("No Answer");
}


内容概要:本文介绍了一个基于MATLAB实现的无人机三维路径规划项目,采用蚁群算法(ACO)与多层感知机(MLP)相结合的混合模型(ACO-MLP)。该模型通过三维环境离散化建模,利用ACO进行全局路径搜索,并引入MLP对环境特征进行自适应学习与启发因子优化,实现路径的动态调整与多目标优化。项目解决了高维空间建模、动态障碍规避、局部最优陷阱、算法实时性及多目标权衡等关键技术难题,结合并行计算与参数自适应机制,提升了路径规划的智能性、安全性和工程适用性。文中提供了详细的模型架构、核心算法流程及MATLAB代码示例,涵盖空间建模、信息素更新、MLP训练与融合优化等关键步骤。; 适合人群:具备一定MATLAB编程基础,熟悉智能优化算法与神经网络的高校学生、科研人员及从事无人机路径规划相关工作的工程师;适合从事智能无人系统、自动驾驶、机器人导航等领域的研究人员; 使用场景及目标:①应用于复杂三维环境下的无人机路径规划,如城市物流、灾害救援、军事侦察等场景;②实现飞行安全、能耗优化、路径平滑与实时避障等多目标协同优化;③为智能无人系统的自主决策与环境适应能力提供算法支持; 阅读建议:此资源结合理论模型与MATLAB实践,建议读者在理解ACO与MLP基本原理的基础上,结合代码示例进行仿真调试,重点关注ACO-MLP融合机制、多目标优化函数设计及参数自适应策略的实现,以深入掌握混合智能算法在工程中的应用方法。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值