解药还是毒药(codevs 2594)
Smart研制出对付各种症状的解药,可是他一个不小心,每种药都小小地配错了一点原料,所以这些药都有可能在治愈某些病症的同时又使人患上某些别的病症(你可能会问那…那是解药还是毒药啊?)……,经过Smart的努力,终于弄清了每种药的具体性能,他会把每种药能治愈的病症和能使人患上的病症列一张清单给你,然后你要根据这张清单找出能治愈所有病症的最少药剂组合……顺便说一声,病症的数目不超过10种,而且他的药是用不完的,就是说每种药剂都可以被重复使用。
给你们的单子里第一行是病症的总数n(1≤n≤10)。第二行是药剂的种类m(0<m≤100)。
以下有m行,每行有n个数字用空格隔开,文件的第i+2行的n个数字中,如果第j个数为1,就表示第i种药可以治愈病症j(如果患有这种病的话则治愈,没有这种病则无影响),如果为0表示无影响,如果为-1表示反而能使人得上这种病(无病患上,有病无影响)。Smart制的药任何两种性能都不同。
你只要输出用的最少的药剂数就可以了,其实还有可能用尽了所有的药也不能将所有病治愈,那样的话你们只要输出“The patient will be dead.”就可以了。
3
2
1 0 1
-1 1 0
2
1≤n≤10
0<m≤100
二进制、哈希判重加广搜
#include<cstdio>
#include<iostream>
#define M 1100
using namespace std;
struct node
{
int f[M];//病人的状态
int dep;//步骤数
};node q[M];
int a[M][M],num[M],hash[M],n,m,head,tail,sum,flag;
void bfs()
{
while(head<=tail)
{
for(int i=;i<=n;i++)
{
int tot=;
tail++;tot=;
for(int j=;j<=m;j++)
{
if(a[i][j]==)q[tail].f[j]=;
else if(a[i][j]==)q[tail].f[j]=q[head].f[j];
else q[tail].f[j]=;
if(q[tail].f[j]==) tot+=num[j];
}
if(!hash[tot])
{
hash[tot]=;
q[tail].dep=q[head].dep+;
if(tot==sum)
{
printf("%d",q[tail].dep);
flag=;
return;
}
}
else tail--;
}
head++;
}
}
void init()
{
num[]=;
sum=;
for(int i=;i<=m;i++)
num[i]=num[i-]*,
sum+=num[i];
}
int main()
{
scanf("%d%d",&m,&n);
init();
for(int i=;i<=n;i++)
for(int j=;j<=m;j++)
scanf("%d",&a[i][j]);
bfs();
if(!flag)printf("The patient will be dead.");
return ;
}
解药还是毒药(codevs 2594)的更多相关文章
- codevs 2594 解药还是毒药
2594 解药还是毒药 http://codevs.cn/problem/2594/ 题目描述 Description Smart研制出对付各种症状的解药,可是他一个不小心,每种药都小小地配错了一点原 ...
- codevs2594解药还是毒药(状压dp)
2594 解药还是毒药 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 题目描述 Description Smart研制出对付各种症状的解药,可是 ...
- 【BFS】【位运算】解药还是毒药
[codevs2594]解药还是毒药 Description Smart研制出对付各种症状的解药,可是他一个不小心,每种药都小小地配错了一点原料,所以这些药都有可能在治愈某些病症的同时又使人患上某些别 ...
- Hash_P1026毒药?解药?
#include <iostream> #include <cstdio> #include <algorithm> #include <cstring> ...
- 补丁vs错误(codevs 2218 错误答案)
题目描述 Description 错误就是人们所说的Bug.用户在使用软件时总是希望其错误越少越好,最好是没有错误的.但是推出一个没有错误的软件几乎不可能,所以很多软件公司都在疯狂地发放补丁(有时这种 ...
- NOI2018准备Day12
上午学了1个小时左右的指针,学了个从句子中分离单词的方法,其他的感觉没学到啥. 中午看了一会儿网络流,懵逼...... A了8道题,4道钻石.3道黄金.1道白银,自己写出了codevs"解药 ...
- java web 程序---猜数字游戏的猜了多少次的代码
思路:用setAttribute()放 ,然后直接输出 Integer str=(Integer)session.getAttribute("count"); int num3= ...
- vijosP1026毒药?解药?
hash. 怎么感觉叫状态压缩bfs比较合适呢? #include<cstdio> #include<algorithm> #include<cstring> us ...
- Tyvj3308毒药解药题解
题目大意 这些药都有可能在治愈某些病症的同一时候又使人患上某些别的病症--经过我天才的努力.最终弄清了每种药的详细性能,我会把每种药能治的病症和能使人患上的病症列一张清单给你们,然后你们要依据这张清单 ...
随机推荐
- Inno Step 安装包程序 写INI配置文件脚本
[INI]Filename: "{app}\Config\config.ini"; Section: "config";Key: "name" ...
- Nginx反向代理多虚拟主机代理
根据http://www.cnblogs.com/zzzhfo/p/6032095.html这个环境配置 在web01和web02上配置基于域名的虚拟主机 web01 [root@web01 /]# ...
- HDU 5651 计算回文串个数问题(有重复的全排列、乘法逆元、费马小定理)
原题: http://acm.hdu.edu.cn/showproblem.php?pid=5651 很容易看出来的是,如果一个字符串中,多于一个字母出现奇数次,则该字符串无法形成回文串,因为不能删减 ...
- CSU 1333 Funny Car Racing (最短路)
题目链接: http://acm.csu.edu.cn/OnlineJudge/problem.php?id=1333 解题报告:一个图里面有n个点和m条单向边,注意是单向边,然后每条路开a秒关闭b秒 ...
- UITabBarController的使用和坑
本人apem 说到UITabBarController, 最首要的坑就是tabbar的图片不显示的问题 1. tabbar上的图片一定要2套以上, 例如一个uitabbaritem的image是 se ...
- (备忘)android模拟器摄像头模拟
Camera分Front Camera和Back Camera 通常我们模拟后摄像头就可以了 三个选项 none:表示没有摄像头,打开摄像应用会崩溃 emulated:系统模拟一个动态的画面--在黑白 ...
- windows下vim编辑器,字符编码设置。
在windows下的vim默认字符集修改 之前使用vim编辑器的时候碰到乱码的问题,后来在网上看了记下了:在vim编辑器中按esc进入命令模式 1.修改vim内部编码 set encoding= ...
- 用消息机制解耦Activity跳转
我见过的Activity方式有三种: 1, 默认的,在一个Activity里创建一个Intent,然后startActivity/startActivityForResult: 2, 给被跳转到的Ac ...
- div 自动满屏
通常通过jq来做,类似这样: $('#navigation').css({ height: $(window).innerHeight() }); css3后,只需要用 下面这段样式即可 #navig ...
- [ruby on rails] 深入(1) ROR的一次request的响应过程
示意图 即: 1. 浏览器发起请求 2. Routes对请求进行一个url映射,交给对应的Controller来处理 3/4. Contoller从Model中获取数据(或者操作数据) 5. 返回给 ...