uva140-带宽

此题为小白书暴力求解法的训练参考

翻译请戳 http://luckycat.kshs.kh.edu.tw/

解题思路

回溯。可以先排序后搜索。

代码

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<algorithm>
using namespace std;
#define MAX_LEN 200
char P[MAX_LEN], A[MAX_LEN];
char Final[MAX_LEN];
bool used[MAX_LEN];
bool G[MAX_LEN][MAX_LEN];
int n, minval;
bool ex(char cha)
{
    for(int i=0; i<n; i++) if(P[i]==cha) return true;
    return false;
}
void Read()
{
    char c;
    c = getchar();
    while(c != ‘\n‘) {
        if(!ex(c)) P[n++] = c; getchar();
        char root = c;
        while((c=getchar()) != ‘;‘&&c!=‘\n‘) {
            if(c == ‘ ‘) continue;
            else { if(!ex(c)) P[n++] = c;
                G[root][c] = true; G[c][root] = true; }
        }
        if(c!=‘\n‘) c = getchar();
    }
}
int CalWid(int dex)
{
    int value = 0;
    for(int i=0; i<dex-1; i++) {
        for(int j=i+1; j<dex; j++) if(G[A[i]][A[j]]) {
            if(abs(i-j)>value) value = abs(i-j);
        }
    }
    return value;
}
void Search(int cur)
{
    if(CalWid(cur) >= minval) return ;
    if(cur == n) { int wid=CalWid(cur); if(wid<minval) minval=wid;
        for(int i=0; i<cur; i++) Final[i] = A[i]; return ; }
    for(int i=0; i<n; i++) if(!used[P[i]]) {
        A[cur] = P[i];
        used[P[i]] = true;
        Search(cur+1);
        used[P[i]] = false;
    }
}
int main()
{
    char ch;
    ch = getchar();
    while(ch != ‘#‘) {
        ungetc(ch, stdin);
        memset(used, 0, sizeof(used));
        memset(G, 0, sizeof(G));
        minval = 1000; n = 0;
        Read();
        sort(P, P+strlen(P));
        Search(0);
        for(int i=0; i<n; i++) printf("%c ", Final[i]);
        printf("-> %d\n", minval);
        ch = getchar();
    }
    return 0;
}
时间: 2024-08-10 21:09:44

uva140-带宽的相关文章

UVa140 Bandwidth 小剪枝+双射小技巧+枚举全排列+字符串的小处理

给出一个图,找出其中的最小带宽的排列.具体要求见传送门:UVa140 这题有些小技巧可以简化代码的编写. 本题的实现参考了刘汝佳老师的源码,的确给了我许多启发,感谢刘老师. 思路: 建立双射关系:从字符A到字符Z遍历输入的字符串,用strchr函数将输入中出现的字符找出,并将找出的字符进行编号,用letter和id分别存储字符和对应的编号 降维:输入中给出的,是类似于邻接表形式的二维形式,如果我们用二维数据结构,将增加处理时对于输出细节的处理难度,用 2个 vector将输出降低到1维,简化了计

百兆带宽服务器

咨询QQ号:83095433 国内百兆带宽服务器只需1299元/两个月,是的,1299元/两个月. 双志强处理器 8G内存 1000G硬盘,高配置,超高性价比.百兆带宽服务器 如果您还是觉得贵的话,河南网通百兆带宽服务器只要988元/两个月,确实是两个月. 双至强处理器 4G内存 500G硬盘,中高等配置,还是不错的选择哦. 江苏双线599元也是两个月百兆带宽服务器哦. 南电信北网通,总有一款适合您,我们的价格绝无仅有.欢迎您的垂询. 公司庆祝注册成立十周年,我们就这么任性,就怕您不相信.就是租

无线通信网络学习之相干时间与相干带宽(20141212)

在学习LTE关键技术之前,先来了解一下两个概念:相干时间与相干带宽. 相干时间:信道保持恒定的最大时间差范围,发射端的同一信号在相干时间内达到接收端,信号衰弱特性相似,接收端认为是同一信号. 时间分集要求两次发射的时间间隔要大于相干时间,否则信号会经历相同的衰弱,分集抗衰弱的特性就不存在了. 相干带宽:是描述时延扩展的,指在某一特定频率范围内,任意的两个频率分量都具有很强的幅度相关性,即在相干带宽范围内,多径信道具有恒定的增益和线性相位. 通常相干带宽为多径时延的倒数.即如果信道的最大多径时延扩

Nginx流量带宽请求状态统计(ngx_req_status)

介绍 ngx_req_status 用来展示 nginx 请求状态信息,类似于 apache 的 status, nginx 自带的模块只能显示连接数等等 信息,我们并不能知道到底有哪些请求.以及各 url 域名所消耗的带宽是多少. ngx_req_status 提供了这些功能 按域名. url. ip 等等统计信息 统计总流量 统计当前带宽\峰值带宽 统计总请求数量 安装   # cd /usr/local/src/ # wget "http://nginx.org/download/ngin

深入了解什么是带宽

当今社会,科学技术高速发展,新事物层出不穷,而计算机网络成为了这一发展的催化剂.计算机网络已经渗透到了我们生活中的每一个角落,所以,学习计算机网络是必要的,免得让我们在信息的高速路上成为一只跛行的羔羊. 学习计算机网络,需要先从我们平日生活当中的一些名词入手.那么,什么名词出现的频率最高呢?相信大多数人应该都知道的一个名词--带宽,是我们见到过,听说过频率最高的名词了.所以,这篇文章先来讲讲什么是带宽,它在计算机网络中到底起着什么样的作用. 说到带宽,这真是一个非常幽默非常滑稽的名词.一般来说,

linux下如何使用vnstat查看服务器带宽流量统计

因为很多vps或者服务器都是限流量的,但是又很多服务商并没有提供详细的流量表,比如每天的流量表,所以肯定有人很想知道自己服务器到底跑了多少流量. vnstat就是一个很好用的服务器流量统计命令.我截几个图给大家看下就知道了. 统计天数和统计月份的: 是不是很直观呢.下面我们就来看看这个命令怎么用.estimated是预估使用量的意思.最后一列avg. rate是平均使用带宽.rx是接收流量(inbound),tx是发送流量(outbound) 第一步:安装 centos需要先安装epel源后才能

ROS取数线程分析(4): 不带组装: socket选项SO_SNDBUF,SO_RCVBUF对带宽和CPU的影响(2)

在不带组装,取数线程简化为直接while循环recv,通过setsockopt将SO_SNDBUF, SO_RCVBUF设置为256*1024时,短时间内的测试结果为6.7Gb/s.但是长时间的测试结果却如下图: 上图的横坐标为ROS接收到event的个数,以40000为单位. (x, y)表示 ROS接收到第 x*40000 个 event 时,接收端的带宽为 y Gbits/s. event size 为 2KB. 由上图可以看出,接收端的带宽在保持了一段时间的6Gb/s后,是不断降低的.但

UVA - 140 Bandwidth(带宽)(全排列)

题意:给定图,求是带宽最小的结点排列. 分析:结点数最多为8,全排列即可.顶点范围是A~Z. #pragma comment(linker, "/STACK:102400000, 102400000") #include<cstdio> #include<cstring> #include<cstdlib> #include<cctype> #include<cmath> #include<iostream> #i

nginx流量带宽等请求状态统计( ngx_req_status)

介绍 ngx_req_status用来展示nginx请求状态信息,类似于apache的status,nginx自带的模块只能显示连接数等等信息,我们并不能知道到底有哪些请求.以及各url域名所消耗的带宽是多少.ngx_req_status提供了这些功能. 功能特性 按域名.url.ip等等统计信息 统计总流量 统计当前带宽\峰值带宽 统计总请求数量 1. 安装 # cd /usr/local/src/ # wget "http://nginx.org/download/nginx-1.4.2.t

服务器带宽租多少才够用?你会算吗?

在网络多媒体应用中,带宽的要求往往较高.比如视讯啊.远程协助啊这些功能,都需要有足够的带宽.比如你开发一套视频教学系统,或者视频会议系统,服务器带宽要租多少才够用,这是一个很关键的问题.可是,你知道该怎么算吗? 比如在即时通讯系统中,通常都是一对一的通讯,那么当大家互相打视频,开语音,或者远程协助的时候,对服务器的带宽要求有多高呢?比如在线教学系统中,老师要给学生广播麦克风语音.摄像头视频.远程桌面等,这种情况下有需要多少带宽呢?而对于视频会议,每个人都要把自己的语音视频广播给其他的每一个人,这