状压DP UVA 11795 Mega Man's Mission
/*
题意:洛克人有武器可以消灭机器人,还可以从被摧毁的机器人手里得到武器,问消灭全部机器人的顺序总数
状态压缩DP:看到数据只有16,就应该想到状压(并没有)。因为是照解题报告写的,代码里加点注释,省的以后忘记了
*/
/************************************************
* Author :Running_Time
* Created Time :2015-8-8 10:41:28
* File Name :UVA_11759.cpp
************************************************/ #include <cstdio>
#include <algorithm>
#include <iostream>
#include <sstream>
#include <cstring>
#include <cmath>
#include <string>
#include <vector>
#include <queue>
#include <deque>
#include <stack>
#include <list>
#include <map>
#include <set>
#include <bitset>
#include <cstdlib>
#include <ctime>
using namespace std; #define lson l, mid, rt << 1
#define rson mid + 1, r, rt << 1 | 1
typedef long long ll;
const int MAXN = ;
const int INF = 0x3f3f3f3f;
const int MOD = 1e9 + ;
ll dp[(<<)+];
int w[MAXN];
int s[(<<)+];
char mega[MAXN];
char robot[MAXN];
int n; int main(void) { //UVA 11795 Mega Man's Mission
int T, cas = ; scanf ("%d", &T);
while (T--) {
scanf ("%d", &n);
scanf ("%s", mega); memset (w, , sizeof (w));
for (int i=; i<n; ++i) {
scanf ("%s", robot);
for (int j=; j<n; ++j) {
if (robot[j] == '') {
w[i] |= ( << j); //求出每个机器人拥有的武器,用二进制累加
}
}
} memset (s, , sizeof (s));
for (int i=; i<n; ++i) {
if (mega[i] == '') {
s[] |= ( << i); //求出洛克人手里的武器
}
}
for (int i=; i<(<<n); ++i) { //i表示机器人死亡的情况,例如00000表示一个都没消灭,11111表示全部消灭
s[i] = s[];
for (int j=; j<n; ++j) {
if (i & ( << j)) { //意思是当前第j个机器人被消灭
s[i] |= w[j]; //那么能得到它的武器
}
}
} memset (dp, , sizeof (dp)); dp[] = ; //一个都没被消灭的方案数为1
for (int i=; i<(<<n); ++i) {
if (!dp[i]) continue;
for (int j=; j<n; ++j) {
if ((s[i] & ( << j)) && (i & ( << j)) == ) { //意思是当前有武器能消灭第j个机器人并且要消灭它
dp[i|(<<j)] += dp[i]; //累加到消灭之后的状态里
}
}
}
printf ("Case %d: %lld\n", ++cas, dp[(<<n)-]); //111111全部都被消灭的方案数
} return ;
}
状压DP UVA 11795 Mega Man's Mission的更多相关文章
- 状压DP UVA 10817 Headmaster's Headache
题目传送门 /* 题意:学校有在任的老师和应聘的老师,选择一些应聘老师,使得每门科目至少两个老师教,问最少花费多少 状压DP:一看到数据那么小,肯定是状压了.这个状态不好想,dp[s1][s2]表示s ...
- UVa 11795 Mega Man's Mission (状压DP)
题意:你最初只有一个武器,你需要按照一定的顺序消灭n个机器人(n<=16).每消灭一个机器人将会得到他的武器. 每个武器只能杀死特定的机器人.问可以消灭所有机器人的顺序方案总数. 析:dp[s] ...
- UVA - 11795 Mega Man's Mission
Mega Man is off to save the world again. His objective is to kill the Robots created by Dr. Wily who ...
- UVA 1412 Fund Management (预处理+状压dp)
状压dp,每个状态可以表示为一个n元组,且上限为8,可以用一个九进制来表示状态.但是这样做用数组开不下,用map离散会T. 而实际上很多九进制数很多都是用不上的.因此类似uva 1601 Mornin ...
- UVa 11825 (状压DP) Hackers' Crackdown
这是我做状压DP的第一道题,状压里面都是用位运算来完成的,只要耐下心来弄明白每次位运算的含义,还是容易理解的. 题意: 有编号为0~n-1的n台服务器,每台都运行着n中服务,每台服务器还和若干台其他服 ...
- 【状压DP】【UVA11795】 Mega Man's Mission
传送门 Description 你要杀n个怪,每杀掉一个怪那个怪会掉落一种武器,这种武器可以杀死特定的怪.游戏初始你有一把武器,能杀死一些怪物.每次只能杀一只,求有多少种杀怪方法. Input 多组数 ...
- UVa 1204 Fun Game (状压DP)
题意:有一些小孩(至少两个)围成一圈,有 n 轮游戏,每一轮从某个小孩开始往左或者往右伟手帕,拿到手帕写上自己的性别(B,G),然后以后相同方向给下一个. 然后在某个小孩结束,给出 n 轮手帕上的序列 ...
- UVa 11825 Hackers' Crackdown (状压DP)
题意:给定 n 个计算机的一个关系图,你可以停止每台计算机的一项服务,并且和该计算机相邻的计算机也会终止,问你最多能终止多少服务. 析:这个题意思就是说把 n 台计算机尽可能多的分成一些组,使得每组的 ...
- UVA - 1252 Twenty Questions (状压dp)
状压dp,用s表示已经询问过的特征,a表示W具有的特征. 当满足条件的物体只有一个的时候就不用再猜测了.对于满足条件的物体个数可以预处理出来 转移的时候应该枚举询问的k,因为实际上要猜的物品是不确定的 ...
随机推荐
- MTK平台添加防止误触代码
ltr559_old: #include <linux/interrupt.h> #include <linux/i2c.h> #include <linux/slab. ...
- Linux下汇编语言学习笔记10 ---
这是17年暑假学习Linux汇编语言的笔记记录,参考书目为清华大学出版社 Jeff Duntemann著 梁晓辉译<汇编语言基于Linux环境>的书,喜欢看原版书的同学可以看<Ass ...
- Swoole 入门学习(二)
Swoole 入门学习 swoole 之 定时器 循环触发:swoole_timer_tick (和js的setintval类似) 参数1:int $after_time_ms 指定时间[毫秒] ...
- AOJ731(不等式)
题意:有n(n<=100)个石头,每个石头的价值在Ai~Bi(1<=Ai<=Bi<=10000)之间,将这些石头分给两个人,求两个人的最大总价值差的最小值 分析: 与一般的求最 ...
- pycharm下运行和调试scrapy项目
1. 新建项目 默认在本地已经新建了一个scrapy爬虫项目 2. 打开项目 点击open à 选择刚刚那个本地的scrapy项目meijutt100 3. 项目结构 各个py文件的作用不作介绍,不懂 ...
- Errors running builder 'JavaScript Validator' on
eclipse编译提示Errors running builder 'JavaScript Validator' on 解决方法见下图 去掉 'JavaScript Validator' 即可
- ETL增量单表同步简述_根据dateTime增量
ETL增量单表同步简述 1. 实现需求 当原数据库的表有新增.更新.删除操作时,将改动数据同步到目标库对应的数据表. 2. 设计思路 设计总体流程图如下: 步骤简单说明: 1.设置job的执行属性,如 ...
- 原则 principles
1.找到对的人来讨论问题. 2.把工作分配给对的人才能把事情做对. 3.
- #!/usr/bin/env 脚本解释程序的作用
the Zimbu programming language http://www.zimbu.org/getting-started -------------------------------- ...
- NA交换①
常用的交换设备: 交换机(ASIC)和网桥(Brigde): 交换机的三种转发方式: 直通式(Cut-Through):一旦检测到MAC即转发,速度快但是无法保证准确性: ...