codevs 2594 解题报告 启发式搜索
来源:互联网 发布:广发信德投资 知乎 编辑:程序博客网 时间:2024/06/05 23:03
解药还是毒药
时间限制: 1 s
空间限制: 128000 KB
题目等级 : 钻石 Diamond
题目描述 Description
Smart研制出对付各种症状的解药,可是他一个不小心,每种药都小小地配错了一点原料,所以这些药都有可能在治愈某些病症的同时又使人患上某些别的病症(你可能会问那…那是解药还是毒药啊?)……,经过Smart的努力,终于弄清了每种药的具体性能,他会把每种药能治愈的病症和能使人患上的病症列一张清单给你,然后你要根据这张清单找出能治愈所有病症的最少药剂组合……顺便说一声,病症的数目不超过10种,而且他的药是用不完的,就是说每种药剂都可以被重复使用。
题解
这题是道BFS,BFS第一次搜到的某个状态所用的步数就是最少步数,所以要加一个判重数组,在这里,这个人对于n种病的每一种,只会有“得病”和“不得病”两种情况,所以,可以用二进制优化状态。
代码
#include<queue>#include<cstdio>#include<algorithm>#include<cstring>#include<iostream>#include<cmath>using namespace std;int n,m;const int inf=0x7fffffff;const int maxn=100+100;int sum=0,head,tail,yao[maxn][maxn],ans=inf;bool vis[10500];struct meico{ int num; int tot[maxn];}q[10000];int er[maxn];void clr(){ for(int i=1;i<=n;i++) { sum+=1<<i; er[i]=1<<i; }}bool flag;void bfs(){ while(head<=tail) { for(int i=1;i<=m;i++) { int tot=0; tail++; for(int j=1;j<=n;j++) { if(yao[i][j]==1) q[tail].tot[j]=1; else if(yao[i][j]==0) q[tail].tot[j]=q[head].tot[j]; else q[tail].tot[j]=0; if(q[tail].tot[j]) tot+=er[j]; } if(!vis[tot]) { vis[tot]=1; q[tail].num=q[head].num+1; if(tot==sum) { printf("%d",q[tail].num); flag=1; return; } } else tail--; } head++; } } int main(){ scanf("%d%d",&n,&m); for(int i=1;i<=m;i++) for(int j=1;j<=n;j++) scanf("%d",&yao[i][j]); clr(); bfs(); if(!flag) puts("The patient will be dead."); return 0;}
好东西
阅读全文
2 0
- codevs 2594 解题报告 启发式搜索
- codevs 2152 滑雪 搜索 解题报告
- BZOJ 1598 [Usaco 2008 Mar] 启发式搜索 解题报告
- codevs 1225 八数码难题 搜索+Hash 解题报告
- [CODEVS]数据结构系列 解题报告
- CODEVS 1022 覆盖 解题报告
- [codevs 1515]跳 【解题报告】
- Codevs 1251 括号 解题报告
- Codevs 1557 热浪 解题报告
- CodeVS 2370 LCA 解题报告
- codevs 1006 等差数列 解题报告
- TYVJ搜索解题报告
- 搜索专题解题报告
- UOJ147 搜索 解题报告
- codevs 1174 靶形数独 (启发式搜索)
- 【codevs天梯&青铜Bronze】解题报告
- Codevs 1503 愚蠢的宠物 解题报告
- Codevs 1008 选数 解题报告
- 编程第五十四天
- JAVA环境配置入门教程
- POJ3279-Fliptile
- Unable to start the daemon process
- 资源分享 | 摄影视频 | 碧水天颜摄影视频
- codevs 2594 解题报告 启发式搜索
- opencv 编译及简介显示一张图片
- HDU 1004 Let the Balloon Rise 多种方式的字符串比较
- java中Runnable和Thread的区别
- PAT:1008 Elevator
- 类对象与类指针_虚函数与多态
- 使用java语言中的注解生成器生成代码
- C#写一个“高逼格”的俄罗斯方块
- 推荐书目