博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
NOIP前夕:codevs,解药还是毒药
阅读量:4877 次
发布时间:2019-06-11

本文共 2566 字,大约阅读时间需要 8 分钟。

解药还是毒药
时间限制: 1 s
空间限制: 128000 KB
题目描述 
Description

Smart研制出对付各种症状的解药,可是他一个不小心,每种药都小小地配错了一点原料,所以这些药都有可能在治愈某些病症的同时又使人患上某些别的病症(你可能会问那…那是解药还是毒药啊?)……,经过Smart的努力,终于弄清了每种药的具体性能,他会把每种药能治愈的病症和能使人患上的病症列一张清单给你,然后你要根据这张清单找出能治愈所有病症的最少药剂组合……顺便说一声,病症的数目不超过10种,而且他的药是用不完的,就是说每种药剂都可以被重复使用。

输入描述 
Input Description

给你们的单子里第一行是病症的总数n(1≤n≤10)。第二行是药剂的种类m(0<m≤100)。

以下有m行,每行有n个数字用空格隔开,文件的第i+2行的n个数字中,如果第j个数为1,就表示第i种药可以治愈病症j(如果患有这种病的话则治愈,没有这种病则无影响),如果为0表示无影响,如果为-1表示反而能使人得上这种病(无病患上,有病无影响)。Smart制的药任何两种性能都不同。

输出描述 
Output Description

你只要输出用的最少的药剂数就可以了,其实还有可能用尽了所有的药也不能将所有病治愈,那样的话你们只要输出“The patient will be dead.”就可以了。

样例输入 
Sample Input

3

2

1 0 1

-1 1 0

样例输出 
Sample Output

2

数据范围及提示 
Data Size & Hint
1≤n≤10
0
var i,j,k:longint;    dui:array[1..1024]of string;    init:array[1..100,1..10]of longint;    deep:array[1..1024]of longint;    n,m:longint;    ok:boolean;    head,tail:longint;    temp:string;    pear:boolean;function pan(x:string):boolean;         var i:longint;         begin pan:=true;               for i:=1 to n do                   if x[i]='1'                      then exit(false);               exit(true);         end;begin       readln(n,m);      for i:=1 to m do          for j:=1 to n do              read(init[i,j]);      ok:=false;      head:=1; tail:=1;      deep[1]:=0;      dui[1]:='';      for i:=1 to n do          dui[1]:=dui[1]+'1';      while (head<=tail)and(not ok) do            begin for i:=1 to m do                      begin pear:=false;                            temp:=dui[head];                            for j:=1 to n do                                begin if init[i,j]=1 then  temp[j]:='0';                                      if init[i,j]=-1 then temp[j]:='1';                                end;                            for j:=1 to tail do                                if temp=dui[j]                                   then pear:=true;                            if not pear                               then begin inc(tail);                                          dui[tail]:=temp;                                          deep[tail]:=deep [head]+1;                                          if pan(temp)                                             then begin writeln(deep[tail]);                                                                                         halt;                                                  end;                                    end;                      end;                  inc(head);            end;      writeln('The patient will be dead.');end.
 
 

转载于:https://www.cnblogs.com/spiderKK/p/4928522.html

你可能感兴趣的文章
思维的惰性
查看>>
2018-2019-2 网络对抗技术 20165115 Exp3 免杀原理与实践
查看>>
【Android】学习记录<1> -- 初识ffmpeg
查看>>
定位页面元素的位置
查看>>
关于IAsyncResult接口的CompletedSynchronously属性
查看>>
Python:一篇文章掌握Numpy的基本用法
查看>>
序列化与ArrayList 的elementData的修饰关键字transient
查看>>
理解理解python中的'*','*args','**','**kwargs'
查看>>
php中的闭包类
查看>>
SSH登陆错误 WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!
查看>>
ExtJs之Ajax模式的表单数据加载
查看>>
在javascript中获取一个对象内属性的个数
查看>>
数据结构_Python语言描述(英)pdf
查看>>
HTML5权威指南----读书笔记
查看>>
Swig--模板引擎
查看>>
OpenCV中Camshitf算法学习(补充)
查看>>
java基础面试题常出现(一)
查看>>
C# 中奇妙的函数–5. Nullable 静态类
查看>>
Windows 程序 HelloWorld
查看>>
1.1 Python是一种什么样的语言
查看>>