NOIP前夕:codevs,解药还是毒药

解药还是毒药
时间限制: 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<m≤100

采用状态压缩的方式进行搜索因为每个病症只有两种状态  患or不患用一个01字符串来存储这种状态剪枝:如果这种状态存在就不入队如果得到最终解直接退出

code:
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.

 
时间: 2024-08-27 05:13:28

NOIP前夕:codevs,解药还是毒药的相关文章

codevs 2594 解药还是毒药

2594 解药还是毒药 http://codevs.cn/problem/2594/ 题目描述 Description Smart研制出对付各种症状的解药,可是他一个不小心,每种药都小小地配错了一点原料,所以这些药都有可能在治愈某些病症的同时又使人患上某些别的病症(你可能会问那-那是解药还是毒药啊?)--,经过Smart的努力,终于弄清了每种药的具体性能,他会把每种药能治愈的病症和能使人患上的病症列一张清单给你,然后你要根据这张清单找出能治愈所有病症的最少药剂组合--顺便说一声,病症的数目不超过

解药还是毒药(codevs 2594)

2594 解药还是毒药 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 题解 查看运行结果 题目描述 Description Smart研制出对付各种症状的解药,可是他一个不小心,每种药都小小地配错了一点原料,所以这些药都有可能在治愈某些病症的同时又使人患上某些别的病症(你可能会问那…那是解药还是毒药啊?)……,经过Smart的努力,终于弄清了每种药的具体性能,他会把每种药能治愈的病症和能使人患上的病症列一张清单给你,然后你要根据这张清单找出能治愈所有病症

2594 解药还是毒药

2594 解药还是毒药 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 题解 题目描述 Description Smart研制出对付各种症状的解药,可是他一个不小心,每种药都小小地配错了一点原料,所以这些药都有可能在治愈某些病症的同时又使人患上某些别的病症(你可能会问那…那是解药还是毒药啊?)……,经过Smart的努力,终于弄清了每种药的具体性能,他会把每种药能治愈的病症和能使人患上的病症列一张清单给你,然后你要根据这张清单找出能治愈所有病症的最少药剂组合

codevs2594解药还是毒药(状压dp)

2594 解药还是毒药 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 题目描述 Description Smart研制出对付各种症状的解药,可是他一个不小心,每种药都小小地配错了一点原料,所以这些药都有可能在治愈某些病症的同时又使人患上某些别的病症(你可能会问那…那是解药还是毒药啊?)……,经过Smart的努力,终于弄清了每种药的具体性能,他会把每种药能治愈的病症和能使人患上的病症列一张清单给你,然后你要根据这张清单找出能治愈所有病症的最少药剂组合……顺

NOIP前夕:codevs,修剪花卉

修剪花卉  时间限制: 1 s 空间限制: 256000 KB 题目描述 Description ZZ对数学饱有兴趣,并且是个勤奋好学的学生,总是在课后留在教室向老师请教一些问题. 一天他早晨骑车去上课,路上见到一个老伯正在修剪花花草草,顿时想到了一个有关修剪花卉的问题. 于是当日课后,ZZ就向老师提出了这个问题: 一株奇怪的花卉,上面共连有N 朵花,共有N-1条枝干将花儿连在一起,并且未修剪时每 朵花都不是孤立的. 每朵花都有一个“美丽指数”,该数越大说明这朵花越漂亮,也有“美丽指数”为负数的

【转载】【知识点总结】NOIP前夕 2014.11.4

2014.11.4 7:33 还有三天半就要NOIP,圈一下要背的知识点: 一.数论 1.素数判断 2.筛法求素数 3.求一个数的欧拉函数值 4.预处理欧拉函数 5.卡塔兰数递推式 6.快速幂(模素数的乘法逆元) 7.GCD 二.图论 1.最短路:①堆dijkstra ②spfa 2.kruscal 最小生成树 3.LCA(块状树) 4.匈牙利算法 5.验证二分图 6.scc缩点 7.拓扑排序 三.动态规划经典题 1.零一背包 2.完全背包 3.分组背包 4.最长上升(不下降)子序列 5.方格取

【知识点总结】NOIP前夕 2014.11.4

2014.11.4 7:33 还有三天半就要NOIP,圈一下要背的知识点: 一.数论 1.素数判断 2.筛法求素数 3.求一个数的欧拉函数值 4.预处理欧拉函数 5.卡塔兰数递推式 6.快速幂(模素数的乘法逆元) 7.GCD 二.图论 1.最短路:①堆dijkstra ②spfa 2.kruscal 最小生成树 3.LCA(块状树) 4.匈牙利算法 5.验证二分图 6.scc缩点 7.拓扑排序 三.动态规划经典题 1.零一背包 2.完全背包 3.分组背包 4.最长上升(不下降)子序列 5.方格取

NOIP前夕:noi.openjudge,Maximum sum

Maximum sum 总Time Limit: 1000msMemory Limit: 65536kB Description Given a set of n integers: A={a1, a2,..., an}, we define a function d(A) as below: t1 t2 d(A) = max{ ∑ai + ∑aj | 1 <= s1 <= t1 < s2 <= t2 <= n } i=s1 j=s2 Your task is to calc

NOIP前夕:noi.openjudge,Gopher II

Gopher II 总Time Limit:2000msMemory Limit:65536kB Description The gopher family, having averted the canine threat, must face a new predator.  The are n gophers and m gopher holes, each at distinct (x, y) coordinates. A hawk arrives and if a gopher doe