【状压bfs】ctsc 1999 补丁vs错误
2015-10-22 08:21
489 查看
水题随便A
[code]#include <iostream> #include <cstdio> #include <queue> #include <cstring> using namespace std; int dist[2000000]; int js[100]; struct lyd { int s1,s2,c1,c2,time; }a[200]; queue<int> Q; int main() { int n,m; cin >> n >> m; js[1] = 1; for(int i = 2;i <= 30;i ++) js[i] = (js[i-1] << 1); memset(dist,63,sizeof(dist)); for(int i = 1;i <= m;i ++) { cin >> a[i].time; char ch[100]; scanf("%s",ch); for(int k = 0;k < n;k ++) { if(ch[k] == '+') a[i].s1 += js[k+1]; if(ch[k] == '-') a[i].s2 += js[k+1]; } scanf("%s",ch); for(int k = 0;k < n;k ++) { if(ch[k] == '+') a[i].c1 += js[k+1]; if(ch[k] == '-') a[i].c2 += js[k+1]; } } dist[js[n+1]-1] = 0; Q.push(js[n+1]-1); while(!Q.empty()) { int p = Q.front(); Q.pop(); for(int i = 1;i <= m;i ++) { if((p&a[i].s1) == a[i].s1 && ((~p)&a[i].s2) == a[i].s2) { int k = (p|a[i].c1)^(p&a[i].c2); if(dist[k] > dist[p] + a[i].time) { dist[k] = dist[p] + a[i].time; Q.push(k); } } } } if(dist[0] != 1061109567) cout << dist[0] << endl; else cout << 0 << endl; return 0; }
相关文章推荐
- sdwebimage如何获取缓存大小以及清除缓存
- HA集群之二:部署HA wordpress Cluster
- 微服务年度总结,看完这个你应该知道如何回答别人的问题了。
- mysql 不能插入中文和显示中文
- 矩阵算法 高斯消元 行列式 矩阵的秩
- 关于ExecuteNonQuery()执行成功却返回-1的问题
- 按位与运算符
- App 快速上架经验
- JSON对象长度和遍历方法-前端开发博客
- 价格改革确立时间表和路线图 六大重点领域破题
- iOS --- 音量调节视图MPVolumeView的使用
- 事件对象详解
- Iterator
- IE input file隐藏不能上传文件解决方法
- 如何从上位机或者触摸屏设定Time或S5Time值?
- OC多个形参
- OC学习笔记之Block基础知识
- Online random forest
- 【基础练习】【DFS】codevs2549 自然数和分解题解
- 【基础练习】【DFS】codevs2806 红与黑题解