当前位置: 首页 > wzjs >正文

南京软月网站建设公司重庆市建设工程信息网招标文件

南京软月网站建设公司,重庆市建设工程信息网招标文件,免费网站2021年能用的网址,济南营销网站建设文章目录 数据中心网络地址规划问题描述输入格式输出格式示例输入示例输出实现思路1. IP地址转换2. 区间排序3. 动态规划 C语言完整实现(含详细注释)总结 数据中心网络地址规划 问题描述 你是一名数据中心网络地址规划人员。每个业务需要一段IP地址区间…

文章目录

  • 数据中心网络地址规划
    • 问题描述
    • 输入格式
    • 输出格式
    • 示例输入
    • 示例输出
    • 实现思路
      • 1. IP地址转换
      • 2. 区间排序
      • 3. 动态规划
    • C语言完整实现(含详细注释)
    • 总结

数据中心网络地址规划

问题描述

你是一名数据中心网络地址规划人员。每个业务需要一段IP地址区间,形式为:

起始IP 终止IP

不同业务的地址不能重叠。请你从所有区间中选择一些互不重叠的区间,使得:

  1. 选择的区间数量最多;
  2. 如果数量相同,选择占用IP地址数最少的方案;
  3. 如果仍然相同,则按起始IP的字典序排序(小的优先)。

输入格式

  • 第一行是业务个数 n n n 1 ≤ n ≤ 1000 1 \leq n \leq 1000 1n1000);
  • 接下来的 n n n 行是每个业务的IP地址区间。

输出格式

按规则选出的多个区间,按照排序规则输出,每行一个。


示例输入

3
192.168.1.9 192.168.1.12
192.168.1.1 192.168.1.10
192.168.1.12 192.168.1.13

示例输出

192.168.1.1 192.168.1.10
192.168.1.12 192.168.1.13

实现思路

1. IP地址转换

IP地址用点分十进制表示(如192.168.1.10),我们把它转换为32位整数,方便比较大小与计算长度。

转换公式:
I P = a × 25 6 3 + b × 25 6 2 + c × 256 + d IP = a \times 256^3 + b \times 256^2 + c \times 256 + d IP=a×2563+b×2562+c×256+d

2. 区间排序

根据以下优先级对区间排序:

  • 按结束IP升序;
  • 若结束IP相同,则按区间长度升序;
  • 若都相同,则按起始IP升序。

3. 动态规划

dp[i] 表示前 i i i 个区间中最优方案,记录:

  • 区间数量;
  • 总占用IP地址数;
  • 字典序;
  • 所选区间下标。

我们用动态规划在 O(n^2) 范围内求解最优不重叠区间选择方案。


C语言完整实现(含详细注释)

#include <stdio.h>
#include <stdlib.h>
#include <string.h>#define MAXN 1005// 将IP地址字符串转换为32位无符号整数
unsigned int ip_to_int(const char *ip) {unsigned int a, b, c, d;sscanf(ip, "%u.%u.%u.%u", &a, &b, &c, &d);return (a << 24) | (b << 16) | (c << 8) | d;
}// 将整数形式的IP转换为字符串格式
void int_to_ip(unsigned int ip, char *out) {sprintf(out, "%u.%u.%u.%u", (ip >> 24) & 255, (ip >> 16) & 255, (ip >> 8) & 255, ip & 255);
}// 区间结构体,记录起止IP及原始字符串
typedef struct {unsigned int start, end;unsigned int cost;  // 占用IP数char s_str[20], e_str[20]; // 原始字符串
} Interval;// 动态规划方案结构体
typedef struct {int cnt;      // 选中业务数量int cost;     // 总占用IP数int index[MAXN]; // 记录选择的区间下标int index_len;
} DPPlan;Interval intervals[MAXN];
DPPlan dp[MAXN];
int p[MAXN]; // p[i]:第i个区间能接在p[i]之后int cmp(const void *a, const void *b) {Interval *x = (Interval *)a;Interval *y = (Interval *)b;if (x->end != y->end) return x->end < y->end ? -1 : 1;if (x->cost != y->cost) return x->cost < y->cost ? -1 : 1;return x->start < y->start ? -1 : 1;
}// 判断 plan1 是否比 plan2 更优
int better(DPPlan *a, DPPlan *b) {if (a->cnt != b->cnt) return a->cnt > b->cnt;if (a->cost != b->cost) return a->cost < b->cost;for (int i = 0; i < a->index_len && i < b->index_len; i++) {unsigned int sa = intervals[a->index[i]].start;unsigned int sb = intervals[b->index[i]].start;if (sa != sb) return sa < sb;}return 1;
}int main() {int n;scanf("%d", &n);// 读取区间for (int i = 0; i < n; i++) {scanf("%s %s", intervals[i].s_str, intervals[i].e_str);intervals[i].start = ip_to_int(intervals[i].s_str);intervals[i].end = ip_to_int(intervals[i].e_str);intervals[i].cost = intervals[i].end - intervals[i].start + 1;}// 按照排序规则排序qsort(intervals, n, sizeof(Interval), cmp);// 二分预处理p[i]:找出与当前区间不重叠的最后一个for (int i = 0; i < n; i++) {p[i] = -1;for (int j = i - 1; j >= 0; j--) {if (intervals[j].end < intervals[i].start) {p[i] = j;break;}}}// 初始化dp[0]dp[0].cnt = 1;dp[0].cost = intervals[0].cost;dp[0].index[0] = 0;dp[0].index_len = 1;for (int i = 1; i < n; i++) {DPPlan pick = {0}, no_pick = dp[i - 1];if (p[i] != -1) {pick = dp[p[i]];  // 从p[i]转移而来}pick.cnt += 1;pick.cost += intervals[i].cost;pick.index[pick.index_len++] = i;if (better(&pick, &no_pick)) {dp[i] = pick;} else {dp[i] = no_pick;}}// 输出最后一个最优方案中的区间for (int i = 0; i < dp[n - 1].index_len; i++) {int idx = dp[n - 1].index[i];printf("%s %s\n", intervals[idx].s_str, intervals[idx].e_str);}return 0;
}

总结

  • 使用整数形式处理IP地址,便于大小比较;
  • 多重排序确保满足题目的优先级要求;
  • 动态规划+二分预处理高效求解;
  • 所有处理逻辑均添加详细注释,适合C语言学习者参考。

文章转载自:

http://f42mgCq6.tzmjc.cn
http://3LENIL5e.tzmjc.cn
http://XPrAib1x.tzmjc.cn
http://4ak0IyQT.tzmjc.cn
http://XU3qhOSb.tzmjc.cn
http://YcbilFJi.tzmjc.cn
http://7hX2zCsq.tzmjc.cn
http://G8913Y3S.tzmjc.cn
http://ypQlxYmV.tzmjc.cn
http://OMEBdlri.tzmjc.cn
http://qqC2viBr.tzmjc.cn
http://Tu59DZXM.tzmjc.cn
http://Raw2PILp.tzmjc.cn
http://VzLmnd7R.tzmjc.cn
http://o60hn0mL.tzmjc.cn
http://HuW16Xhx.tzmjc.cn
http://WcLhtCjf.tzmjc.cn
http://Ig506JQQ.tzmjc.cn
http://L6TQWLpE.tzmjc.cn
http://7zQrMN5N.tzmjc.cn
http://BmMs8RY7.tzmjc.cn
http://31Kb6QO7.tzmjc.cn
http://nq5r6aNq.tzmjc.cn
http://81wHQxBv.tzmjc.cn
http://u5byYOTd.tzmjc.cn
http://XMdLM8d0.tzmjc.cn
http://Z7knZ3du.tzmjc.cn
http://zhe9esqw.tzmjc.cn
http://9iNcSvte.tzmjc.cn
http://xz2L0e8r.tzmjc.cn
http://www.dtcms.com/wzjs/763747.html

相关文章:

  • 进入网站自动全屏怎么做2017网站发展趋势
  • 站长统计app进入网址新版小猪多语种外贸网站建设
  • 郑州网站优化排名郑州网站推广排名公司
  • 中文html5网站欣赏wordpress网站修改域名
  • pt网站怎么下载与做软件开发哪里学
  • 有哪些好用的网站唐山个人网站建设
  • 网站建设怎么添加视频苏州交通网站建设
  • 风景旅游网站建设的设计思路网络设计工程师是干什么的
  • 网站如何提高权重下载站用什么cms
  • 网站设计制作费用wordpress 产品分类
  • 制作简历网站开发网站建设亇金手指排名十四
  • 浏阳网站开发建设公司形象vi设计
  • 海口网站开发找千素网高端网站建设公司怎么选
  • 网站不兼容怎么办烟台制作小程序的公司
  • xx企业网站建设方案书苏州公司网站建设报价
  • 网站建设营销的技巧跑胡子网站开发
  • 西安网站开发高端网站开发手机网站用什么软件做的好
  • 网站开发创业西安市长安区规划建设局网站
  • 自己有网站怎么做app建立视频网站
  • 文本分析网站设计logo网站免费下载
  • paypal客户端网站建设评价想做电商怎么注册
  • 下载整个网站的软件有哪些网站是可以接单做任务的
  • 网站的专区怎么建设模板规格尺寸
  • 什么网站自己做名片好WordPress来必力
  • 朵以服饰 网站建设全国小微企业名录查询
  • 比较有名的个人网站网站里做任务
  • 湖州公司做网站怎么管理网站的内容
  • 温州网站建设选择乐云seo摄影网站建设任务书
  • 网站被黑能查到是谁做的吗做网站构建
  • 建设维护网站 未签订合同做网站要多少