`
Simone_chou
  • 浏览: 192703 次
  • 性别: Icon_minigender_2
  • 来自: 广州
社区版块
存档分类
最新评论

LED Display(二分图 + 最小路径覆盖)

    博客分类:
  • ZOJ
 
阅读更多
LED Display
Time Limit: 2 Seconds      Memory Limit: 65536 KB

One day in the laboratory, Fred found some LED displays. This seven-segment LED can display digit 0 to 9 properly. But Fred soon find the LED have a serious problem, at the beginning, the seven bars were all on. But when one bar once was trun off, it can't be turn on again! So ecah LED only can display digit in certain oder. For example, one LED can display 9,3,7 successively, but can't display 2,4.

Now, Fred have a task to display a sequence of digit that is between 0 to 9. Because of the shortcoming of these LEDs, he need a number of them. But he also want to minimize the number, can you help him?

NOTE:If two digits in a sequece are the same,Fred want for the clearness, so he thought the latter digit can't be displayed on the same LED.

Input:

The input consists of several test cases. The first line of each test case contains a positive integer N (<=1000), then followed by a list of N digits. Each digit follows with a blank space.

Output:

For each test case, you must print a minimum number of LED that Fred need in one line.

Sample Input:

1
8

4
9 0 7 3

8
8 8 8 9 6 5 4 1

Sample Output:

1
2		(Hint:one mothod is display {9,3} on the first LED; {0,7} on the second)
3		(Hint:one possible solution is {8},{8,9,4,1},{8,6,5})

 

       题意:

       给出 N (1 ~ 1000),代表有 N 个数,后给出这 N 个数是什么。0 ~ 9 中的某些数字灭了其中的一些 LED 灯能够显示成其他的数字,但是不能显示相同的数字,问需要最少多少个数字,能显示给出的所有 N 个数。

 

       思路:

       二分图 + 最小路径覆盖。将每个数字可以到达的下一个数化成一条条路径,不能到达则说明自己是一条路径,建成一个无环有向图,最后 N - 最大匹配既是答案。

 

       AC:

#include <cstdio>
#include <cstring>
#include <algorithm>

using namespace std;

const int MAX = 1005;

int n;
int num[MAX], Map[MAX][MAX];
int linker[MAX], vis[MAX];

void build() {
    memset(Map, 0, sizeof(Map));

    for (int i = 1; i < n; ++i) {
        for (int j = i + 1; j <= n; ++j) {
            if (num[i] == 0) {
                if (num[j] == 1) Map[i][j] = 1;
                if (num[j] == 7) Map[i][j] = 1;
            } else if (num[i] == 3) {
                if (num[j] == 1) Map[i][j] = 1;
                if (num[j] == 7) Map[i][j] = 1;
            } else if (num[i] == 4) {
                if (num[j] == 1) Map[i][j] = 1;
            } else if (num[i] == 6) {
                if (num[j] == 5) Map[i][j] = 1;
            } else if (num[i] == 7) {
                if (num[j] == 1) Map[i][j] = 1;
            } else if (num[i] == 8 &&
                       num[j] != 8) Map[i][j] = 1;
            else if (num[i] == 9) {
                if (num[j] == 1) Map[i][j] = 1;
                if (num[j] == 3) Map[i][j] = 1;
                if (num[j] == 4) Map[i][j] = 1;
                if (num[j] == 5) Map[i][j] = 1;
                if (num[j] == 7) Map[i][j] = 1;
            }
        }
    }
}

bool dfs (int u) {
    for (int v = 1; v <= n; ++v) {
        if (Map[u][v] && !vis[v]) {
            vis[v] = 1;
            if (linker[v] == -1 || dfs(linker[v])) {
                linker[v] = u;
                return true;
            }
        }
    }

    return false;
}

int hungary () {
    int res = 0;
    memset(linker, -1, sizeof(linker));

    for (int u = 1; u <= n; ++u) {
        memset(vis, 0, sizeof(vis));
        if (dfs(u)) ++res;
    }

    return res;
}

int main() {

    while(~scanf("%d", &n)) {

        for (int i = 1; i <= n; ++i)
            scanf("%d", &num[i]);

        build();

        printf("%d\n", n - hungary());
    }

    return 0;
}

 

 

分享到:
评论

相关推荐

    DisplayPort+MegaCore+Function.pdf

    - **分组路径**:将原始数据打包成符合 DisplayPort 协议的数据包。 - **测量路径**:用于监测信号质量和链路状态。 - **空白生成器路径**:生成必要的同步信号和空白信号。 - **多路复用器**:根据控制信号选择...

    Mini LED Display电子胸牌LED字幕软件(附驱动).rar

    Mini LED Display是一款电子胸牌显示信息编辑工具,可以编辑添加8条信息,并指定信息显示方式(闪烁或跑马灯),可添加图片信息,设定信息的显示模式、显示速度等。按键:短按切换信息,长按调节亮度压缩包内的PL...

    LED胸片,名片屏,miniLED,无驱版Mini LED Display

    Mini LED Display通常具有低功耗和高耐用性的特点,使得它成为各种便携式或嵌入式显示应用的理想选择。 描述中提到的“miniLED屏改字软件”是与这些LED显示设备配套使用的工具。该软件允许用户编辑和更新显示在Mini...

    LedDisplay

    LED显示屏是一种广泛应用于广告、信息显示、交通指示等领域的电子设备。它由众多小型LED灯组成,通过控制每个LED灯的亮灭来显示各种文本、图像或动态效果。在这个主题中,我们将深入探讨如何利用编程技术来控制LED...

    ds18b20_verilog+UART+LEDdisplay

    标题中的“ds18b20_verilog+UART+LEDdisplay”揭示了这个项目的核心内容,它是关于在FPGA(Field-Programmable Gate Array)上使用Verilog硬件描述语言实现DS18B20温度传感器的数据读取,并通过UART(Universal ...

    LED数字显示例子程序.rar_ vc led_LED Display_VC LED_Vc_led vc

    标题中的“LED数字显示例子程序.rar_ vc led_LED Display_VC LED_Vc_led vc”表明这是一个与Visual C++(简称VC)相关的项目,涉及到LED数字显示的编程实例。LED显示通常是指通过电子设备来呈现数字或字符,常用于...

    C语言程序_LEDDisplay_

    【C语言程序_LEDDisplay_】是一个专门为初学者设计的学习资源,主要目的是帮助用户理解和掌握C语言编程以及在单片机上实现LED显示的基本概念。这个项目涉及到的知识点包括C语言基础、单片机编程、硬件接口操作以及...

    00_1.rar_LED Display_LED effects

    标题中的“00_1.rar_LED Display_LED effects”暗示了这个压缩包可能包含与LED显示屏相关的特效或动画文件。LED显示屏是一种广泛应用在广告、信息显示、舞台背景等领域的电子显示技术,它由大量的LED灯珠组成,通过...

    led-display.rar_LED_LED显示

    在本资料"led-display.rar"中,我们将探讨LED显示技术及其相关实现。 首先,我们要理解LED的工作原理。LED是一种半导体器件,当电流通过时,其内部的PN结会发出光。颜色取决于半导体材料的类型,如红色、绿色、蓝色...

    LED-display.rar_LED_LED Display_led显示程序

    一个简单的OpenGL的LED显示程序,适合于初学者

    led-display.rar_LED Display

    利用人眼的视觉暂留效应,使手在摆动到不同位置的时候,让位于一条直线上的LED显示二维图像的不同的列,实现图形扫描显示。

    VESA-DisplayPort 技术介绍

    总结来说,DisplayPort技术,尤其是DisplayPort 1.4和DisplayPort over USB-C,是现代显示技术的重要组成部分,它们通过提供高带宽、高分辨率、高色彩深度和多流传输能力,极大地提升了用户体验。同时,VESA及其成员...

    PROLLER LED DISPLAY_propeller_atmega32_

    【标题】"PROLLER LED DISPLAY propeller_atmega32_" 涉及到的是一个基于Atmega32微控制器的LED显示屏项目,名为“Propeller Led Display”。在这个项目中,开发者利用Atmega32芯片来驱动LED显示设备,创建出具有...

    LED display

    标题“LED display”指的是利用LED显示屏技术,这种技术在现代信息传播中广泛应用,尤其是在广告、交通指示、商业展示等领域。VB(Visual Basic)是微软公司开发的一种编程环境,用于创建Windows应用程序,包括...

    Agilent LED Display 1位~4位8段数码管LED灯原理图库PCB库(AD集成库).zip

    Agilent LED Display 1位~4位8段数码管LED灯原理图库PCB库(AD集成库),各种封封装各个规格 7-Segment, 1-Digit数码管,.IntLibh后缀文件,8个集成库文件,共计500多个器件封装。 5082-7610 7.62 mm HER 7-Segment ...

    LED Display

    LED Display是一种常见的显示技术,广泛应用于各种电子设备中,如广告屏幕、信息公告板、交通指示牌等。本文将深入探讨模拟LED屏的原理、实现方法以及如何通过代码来创建LED显示效果。 LED(Light Emitting Diode)...

    ANDON SOFTWARES_socket_display_三菱SLMP通訊_LEDDisplay_communication

    "LEDDisplay communication"则是指LED显示屏与系统之间的通信过程。下面将详细介绍这些知识点。 1. **ANDON系统**:ANDON源于日本丰田生产系统,用于提高生产效率和质量。系统通过收集生产线上的数据,当出现异常...

    LED大屏图纸(CAD图纸)

    LED大屏,全称为Light Emitting Diode Display,是一种利用发光二极管作为显示像素的电子显示屏,广泛应用于户外广告、体育场馆、舞台背景、监控显示等领域。在设计LED大屏时,通常会采用计算机辅助设计(CAD)软件...

    Temperature-DS18B20-P-LED-display.rar_led_display_ds18b20

    标题中的"Temperature-DS18B20-P-LED-display.rar_led_display_ds18b20"提到了一个项目,该项目涉及温度测量并利用DS18B20传感器和LED显示屏来显示读数。DS18B20是一款常用的数字温度传感器,它能提供精确的温度数据...

Global site tag (gtag.js) - Google Analytics