hdu 2295 Radar(重复覆盖问题)

DeepSeek掘金——用DeepSeek模型构建AI 代理 在本综合指南中,我们将探讨如何利用 DeepSeek 的功能构建能够以有意义的方式理解、推理和交互的复杂 AI 代理。人工智能领域正在迅速发展,DeepSeek 的模型代表了智能 AI 代理开发的重大进步。在本综合指南中,我们将探讨如何利用 DeepSeek 的功能构建能够以有意义的方式理解、推理和交互的复杂 AI 代理。 阅读详情

Radar

题目链接:

http://acm.hdu.edu.cn/showproblem.php?pid=2295

解题思路:

题目大意:

有m个雷达,每个雷达的覆盖范围都为以r为半径的圆,给定他们的坐标,有n个城市,给定他们的坐标,求最小的r,使得每个城市

都被雷达覆盖,限制条件为最多只有k个雷达工作。

算法思想:

二分答案, 然后使用重复覆盖的Dancing Links模板进行判断,看使用k个能不能覆盖n个点。

首先建图:m行,n列的矩形,也就是横坐标代表雷达,纵坐标代表城市,如果雷达与城市之间的距离小于等于当前的r,则坐标处标记

为1,否则为0,这样就转化为了01矩阵,也就是解决问题能不能在这个矩阵中找出一些行(行数小于等于k),使得这些行组成的新

矩阵,每列都至少有一个1(重复覆盖,每列可以有多个1).

这里有一个A*的优化:估价函数h意义为从当前状态最好情况下需要添加几条边才能覆盖。

AC代码:

#include <iostream>
#include <cstdio>
#include <cmath>
using namespace std;

const int maxnode = 3000;
const int maxm = 55;
const int maxn = 55;
int k;

struct DLX{
    int n,m,len;
    int U[maxnode],D[maxnode],R[maxnode],L[maxnode],Row[maxnode],Col[maxnode];
    int H[maxn];//行头结点
    int S[maxm];//每列有多少个结点
    int ansd,ans[maxn];//如果有答案,则选了ansd行,具体是哪几行放在ans[]数组里面,ans[0~ansd-1]

    void init(int _n,int _m){
        n = _n;m = _m;
        for(int i = 0; i <= m; i++){
            S[i] = 0;
            U[i] = D[i] = i;//初始状态时,上下都指向自己
            L[i] = i-1;
            R[i] = i+1;
        }
        R[m] = 0,L[0] = m;
        len = m;//编号,每列都有一个头结点,编号1~m
        for(int i = 1; i <= n; i++)
            H[i] = -1;//每一行的头结点
    }

    void link(int r,int c){//第r行,第c列
        ++S[Col[++len]=c];//第len个节点所在的列为c,当前列的结点数++
        Row[len] = r;//第len个结点行位置为r
        D[len] = D[c];
        U[D[c]] = len;
        U[len] = c;
        D[c] = len;
        if(H[r] < 0)
            H[r] = L[len] = R[len] = len;
        else{
            R[len] = R[H[r]];
            L[R[H[r]]] = len;
            L[len] = H[r];
            R[H[r]] = len;
        }
    }

    void del(int c){
        for(int i = D[c]; i != c; i = D[i]){
            L[R[i]] = L[i];
            R[L[i]] = R[i];
        }
    }

    void resume(int c){
        for(int i = U[c]; i != c; i = U[i])
            L[R[i]] = R[L[i]] = i;
    }
    bool v[maxnode];
    int f(){
        int ret = 0;
        for(int c = R[0]; c != 0; c = R[c])
            v[c] = true;
        for(int c = R[0]; c != 0; c = R[c]){
            if(v[c]){
                ret++;
                v[c] = false;
                for(int i = D[c]; i != c; i = D[i]){
                    for(int j = R[i]; j != i; j = R[j]){
                        v[Col[j]] = false;
                    }
                }
            }
        }
        return ret;
    }
    bool dance(int d){//递归深度
        if(d + f() > k)
            return false;
        if(R[0] == 0)
            return d <= k;

        int c = R[0];
        for(int i = R[0]; i != 0; i = R[i]){
            if(S[i] < S[c])
                c = i;
        }
        for(int i = D[c]; i != c; i = D[i]){
            del(i);
            ans[d] = Row[i];//列头节点下面的一个节点
            for(int j = R[i]; j != i; j = R[j])
                del(j);
            if(dance(d+1))
                return true;
            for(int j = L[i]; j != i; j = L[j])
                resume(j);
            resume(i);
        }
        return false;
    }
};

DLX head;
const double eps = 1e-8;
struct point{
    double x,y;
}city[maxn],station[maxn];

double dis(point a,point b){
    return sqrt((a.x-b.x)*(a.x-b.x)+(a.y-b.y)*(a.y-b.y));
}

int main(){
    int T;
    scanf("%d",&T);
    while(T--){
        int n,m;
        scanf("%d%d%d",&n,&m,&k);
        for(int i = 0; i < n; i++)
            scanf("%lf%lf",&city[i].x,&city[i].y);
        for(int i = 0; i < m; i++)
            scanf("%lf%lf",&station[i].x,&station[i].y);
        double l = 0, r = 3000;
        while(r - l >= eps){
            double mid = (l+r)/2;
            head.init(m,n);
            for(int i = 0; i < m; i++){
                for(int j = 0; j < n; j++){
                    if(dis(station[i],city[j]) < mid - eps)
                        head.link(i+1,j+1);
                }
            }
            if(head.dance(0))
                r = mid - eps;
            else
                l = mid + eps;
        }
        printf("%.6lf\n",l);
    }
    return 0;
}


五、MT8168 音频驱动之SPEAKER 本章主要讲解MT8168平台的内部SPEAKER驱动配置。分为HP接法和LINE OUT接法。2.1.3 audio_custom_exp.h设置。2.1.4 mixer_paths.xml设置。2.2.3 mixer_paths.xml设置。2.1.2 ProjectConfig 设置。2.2.2 ProjectConfig 设置。2.2.1 deconfig设置。2.1.1 DTS设置。...... 阅读详情

相关推荐

决策规划算法四:Piecewise Jerk Path Optimizer

一,问题分析 路径规划的本质目的:规划出一条安全(无碰撞),舒适(平滑),符合车辆运动学的轨迹。 如下图所示,决策算法开辟凸空间后,路径规划算法用数值优化的方法搜索出一条最优路径,即将问题转化为二次规划的问题,采用二次规划的求解器进行求解。 二次规划问题的求解顺序: 1,确定优化变量 2,确定目标函数 3,确定约束条件 4,将目标函数和约束条件变形为二次规划的标准形式 5,用二次规划求解器进行求解,获得优化变量的序列,使得目标函数取得最小值。 注:路径的最终表达式为:,..

肥嘟嘟的左卫门 8560

重复覆盖问题

重复覆盖模型及其经典做法。

m0_56039061的博客 982

Vue3项目实战:CKEditor5富文本编辑器从安装到隐藏不需要的功能

本文详细介绍了在Vue3项目中集成并深度定制CKEditor5富文本编辑器的完整流程。通过分析其模块化架构,指导开发者从标准构建出发,移除图片、表格等冗余插件,创建专属轻量构建,从而显著减小打包体积并提升用户体验。文章结合实战代码,涵盖了环境搭建、自定义构建配置、高级优化技巧等关键步骤。

weixin_29016833的博客 283

经典问题——重复覆盖问题

糖果店的老板一共有 M 种口味的糖果出售。 为了方便描述,我们将 M 种口味编号 1∼M。 小明希望能品尝到所有口味的糖果。 遗憾的是老板并不单独出售糖果,而是 K 颗一包整包出售。 幸好糖果包装上注明了其中 K 颗糖果的口味,所以小明可以在买之前就知道每包内的糖果口味。 给定 N 包糖果,请你计算小明最少买几包,就可以品尝到所有口味的糖果。 输入格式 第一行包含三个整数 N,M,K。 接下来 N 行每行 K 这整数 T1,T2,⋅⋅⋅,TK,代表一包糖果的口味。 输出格式 一个整数表示答案。 如果小明无法

pxlsdz的博客 2126

告别手动复制粘贴!用Python脚本+pywinauto实现PC微信消息自动发送(附完整源码)

本文详细介绍了如何利用Python和pywinauto实现PC微信消息的自动化发送,告别繁琐的手动操作。从环境搭建、UI控件定位到构建健壮的发送流程,再到高级功能扩展和项目打包部署,全面解析了自动化办公的实现方案,显著提升工作效率。

weixin_30315723的博客 583

基于PWM的汽车仪表步进电机微步驱动优化实践

本文深入探讨了基于PWM的微步驱动技术,用于优化汽车仪表步进电机的运行性能。通过将传统的分步驱动升级为PWM微步细分驱动,利用正弦/余弦查表法合成旋转磁场,有效消除了指针抖动与噪声,实现了指针的平滑、精准运动。文章以STM32和VID2905电机为例,提供了详细的硬件连接、代码实现及高级优化技巧,为提升汽车仪表体验提供了实用方案。

weixin_29169505的博客 510

dancing links(舞蹈链)——求解精准覆盖及重复覆盖问题

跳跃的舞者,舞蹈链(Dancing Links)算法——求解精确覆盖问题 精确覆盖问题的定义:给定一个由0-1组成的矩阵,是否能找到一个行的集合,使得集合中每一列都恰好包含一个1 例如:如下的矩阵 就包含了这样一个集合(第1、4、5行) 如何利用给定的矩阵求出相应的行的集合呢?我们采用回溯法 矩阵1: 先假定选择第1行,如下所示: 如上图中所示,红色的那行是选中的一行,这一行...

ling_wang的博客 2704

safetensors_rust.SafetensorError: Error while deserializing header: MetadataIncompleteBuffer解决方案

本文主要介绍了safetensors_rust.SafetensorError: Error while deserializing header: MetadataIncompleteBuffer解决方案,希望能对使用Python的同学们有所帮助。 文章目录 1. 问题描述 2. 解决方案 2.1 Windows 2.2 Linux

weixin_43178406的博客 15万+

HDU 2295 Radar(舞蹈链+二分)

RadarTime Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 4292    Accepted Submission(s): 1657Problem DescriptionN cities of the Java Kingdom need to...

albertluf的博客 297

为 ABAP BSP 与 ICF 量身打造的错误页实践:从 CX_ROOT 到 SICF 的端到端落地指南

摘要 本文系统讲解SAP ABAP平台中BSP与ICF层的错误页定制方法。在BSP层,通过标记错误页属性和绑定ERROR_OBJECT异常对象,实现友好的错误展示与日志记录。ICF层通过SICF事务码统一配置错误页、登录与登出逻辑,支持服务树继承。文章包含可直接落地的代码示例,并针对现代Fiori架构给出演进建议,帮助开发者提升用户体验与系统安全性。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 223

DeepSeek网页版和DeepSeek Harness

DeepSeek网页版是开箱即用的对话工具,适合快速问答与日常任务;而DeepSeekHarness(dsh)是基于Node.js的开源智能体框架,支持文件操作、命令执行、多工具协同,实现“对话即执行”。二者定位不同:网页版为“大脑”,Harness为“躯体”。前者封闭易用,后者开放可扩展,具备可追溯的执行日志与插件化架构。未来,网页版将聚焦轻量化普及,Harness则致力于构建生态平台。对开发者而言,应将AI作为执行层,守住决策层,深耕垂直领域,并掌握AI工作流设计能力,以构建不可替代的技术优势。

几十年资深高级架构师,技术专家的技术笔记。专注C、Java、Python、微服务、云原生、AI工程化及高并发系统分布式架构实战,分享源码剖析、性能调优与架构治理经验。 850

HDU 2295 Radar(二分+DLX重复覆盖)

题目地址 题意:有n个城市,m个可以装雷达的地方,你的资金最多只能装k台雷达,问在这个限制条件下雷达的最小覆盖半径为多少。 思路:二分枚举半径长度,然后通过这个限制条件去建立矩阵(行为该雷达能覆盖的地方,列为该地方能被多少个雷达覆盖),当这个m*n的矩阵建好以后跑一边DLX重复覆盖就好了,当需要删除的行数大于k时就增大半径长度,反之减小。

不要錯過才珍惜 503

Oracle EBS与SAP数据数据切换至迁移华为MetaERP分析

Oracle EBS到华为MetaERP的数据迁移可采用“表对表复制”思路,因其模块化设计下数据模型标准化、边界清晰。核心业务对象存储在结构明确的主表中,与MetaERP模型兼容度高,便于直接映射。而SAP到MetaERP的迁移则因SAP高度优化的复杂表结构(如簇表/池表)、数据分散冗余、深度依赖配置等特点,无法简单复制,必须采用基于业务对象的迁移方法,通过视图/BAPI提取数据并进行深度转换。两种迁移的本质差异源于源系统的数据模型设计理念不同。

金牌架构师 1378

hdu 2295 Radar DLX 重复覆盖问题

http://acm.hdu.edu.cn/showproblem.php?pid=229 题意: 一个国家有n个城市,m个雷达,我们同时操作的雷达数最多为k,给出城市与国家的坐标,求小于等于k的操作下,雷达覆盖的能够覆盖所有城市的最小覆盖半径。 思路: 城市作为列,雷达作为行,二分枚举雷达的半径+DLX重复覆盖求解。 View Code #include &lt;cstdio&...

weixin_33762321的博客 187

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

HDU 2295 Radar(dancin links 重复覆盖问题 +二分)

N cities of the Java Kingdom need to be covered by radars for being in a state of war. Since the kingdom has M radar stations but only K operators, we can at most operate K radars. All radars have the...

ling_wang的博客 378

STM32F407中文手册

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

DLX 重复覆盖 -- HDU2295-Radar

Radar HDU - 2295 题意: 题意为有m个雷达,每一个雷达的覆盖范围都为以r为半径的圆,给定他们的坐标,有n个城市。给定他们的坐标,求最小的r,使得每一个城市都被雷达覆盖。限制条件为最多仅仅有k个雷达工作。 二分答案r。推断所须要的雷达数是否小于给定的k,找到最小的r。 用Dlx反复覆盖来推断。 思路: 二分答案R, 然后建立N*M的01矩阵判断重复覆盖是否可行 建图:m行,n列的矩形...

dajiangyou123456的博客 322

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

HDU2295 Radar —— Dancing Links 可重复覆盖

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2295 Radar Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 4106    Accepted Submissio

A man can be destroyed, but not defeated. 570

HDU_2295_Radar(DancingLinksX重复覆盖+二分)

Radar Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 3333    Accepted Submission(s): 1285 Problem Description N cities of the Java

OTTFF的博客 812

HDU 2295 Radar

Radar Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Problem Description N cities of the Java Kingdom need to be covered by radars for being in a state of war. Sin...

忘梦心的博客 301

【DLX重复覆盖】HDU 2295 Radar

题意:一个国家有n个城市,有m个地方可以建造雷达,最多可以建K个雷达(K>=1 && K<=m),问雷达最短的探测半径,才能使n个城市都能探测到。 思路:比较裸一点的dl,二分答案,然后算出当前状况下 重复覆盖所需的雷达的个数,判断能否满足条件。 #include <cstdio> #include <cmath&g...

154

HDU 2295 Radar 重复覆盖 DLX

题意:   N个城市,M个雷达站,K个操作员,问雷达的半径至少为多大,才能覆盖所有城市。M个雷达中最多只能有K个同时工作。 思路:   二分雷达的半径,看每个雷达可以覆盖哪些城市,然后做重复覆盖,判断这个半径是否可行。   我是直接二分的半径,跑了300+ms,看了Virtual Judge上面跑得快的代码,才发现为了不浪费半径的长度,最小的半径一定等于某一个雷达站到某一个城市之...

198

HDU 2295 Radar (二分+DLX,重复覆盖)

Problem Description N cities of the Java Kingdom need to be covered by radars for being in a state of war. Since the kingdom has M radar stations but only K operators, we can at most ope...

bandiaodai5734的博客 314

B - Radar HDU - 2295(二分+重复覆盖)

题目传送门 思路 题意 n个城市,m个雷达站,从m个雷达站中选择k个使n个城市到打雷达站的最大距离最小,求出这个最大最小值 思路 二分枚举答案 check(int md)函数中用 “DLX重复覆盖”来暴力枚举选择k个城市看在二分枚举的距离为md 的情况下能否覆盖所有城市(可以重复覆盖) 对与构造DLX重复覆盖所需要的 数据矩阵 行表示 m个雷达章,列表示n个将被覆盖的城市。行和列的交点元素为1,如果在md距离下行所代表的雷达站能够覆盖列所代表的城市;否则交点元素为0 详细分析传送门 代码

做一只熊猫不好吗? 461

HDU 2295 Radar (DLX求重复覆盖, A*搜索)

题目大意: 就是在M个站中选择至多K个使得N个点被覆盖, 为需要的最小半径 大致思路: 二分答案R, 然后建立N*M的01矩阵判断重复覆盖是否可行 重复覆盖和精确覆盖不同, 每次只会删掉每一列所有相关的1, 而不会将有相关1的行删去, 所以矩阵在减少的速度上没有精确覆盖快, 需要进行剪枝 这里使用一个估价函数f(), 表示单签状况下最好情况需要多少步才能走完, 进行剪枝

Gatevin的专栏 586
上一篇: 蓝桥杯 历届试题 打印十字图(打印)
下一篇: DLX 精确覆盖 重复覆盖
yphacker
博客等级 码龄12年 199粉丝 540原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值