状压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,因为实际上要猜的物品是不确定的 ...
随机推荐
- 2018/3/3 解析ThreadLocal源码
今天听到一个老哥说道ThreadLocal在源码设计上面的一些好处,于是决定把ThreadLocal源码彻底分析一下. 首先,我们来看下set方法 可以看到,这个方法里,先获得了当前线程,之后将当前线 ...
- operamasks—omMessageBox的使用
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="test.aspx.cs&q ...
- Ubuntu 16.04安装JMeter测试工具
JMeter是Java的测试工具,由Apache开发. 同样,JMeter是跨平台的. 下载: http://jmeter.apache.org/download_jmeter.cgi 安装: 7z ...
- 使用RoboCopy 命令[转载]
经常进行文件管理操作的朋友们,不满意于Windows系统内置的复制功能,因为它太龟速了.于是大家就使用FastCopy.TeraCopy之类的软件来加速复制,但是你是否知道Windows 7已经内置快 ...
- hadoop的linux配置
一.新建hadoop组跟用户(password:hadoop) [root@localhost home]# groupadd hadoop [root@localhost home]# userad ...
- 如何在其他js 引入main.js 中 vue 的实例?
1.原因解析 经测试发现,代码先执行了 index.js >> main.js >> Home.vue scr/api/index.js src/main.js src/co ...
- 【Unix编程】进程间通信(IPC)
进程间通信(IPC,InterProcess Communication)是指在不同进程之间传播或交换信息.IPC的方式通常有管道(包括无名管道和命名管道).消息队列.信号量.共享存储.Socket. ...
- Mariadb 索引及外键
索引 索引相当于一本书的目录,在一个数据库或表有索引的情况下,会很便于查询数据,使查询更加效率,相对的也有缺点,不利于去修改,比较麻烦,有索引便于查询,那就意味着索引创建的越多越好么?然而并不是:索引 ...
- The method getJspApplicationContext(ServletContext) is undefined for the type JspFactory的解决方法
An error occurred at line: [31] in the generated java file: [/data/tmisnt/work/Catalina/localhost/_/ ...
- 嵌入式开发之函数解析---ip地址2进制转字符inet_ntoa 调用中只生效一次
inet_addr() 简述:将一个点间隔地址转换成一个in_addr. #include <winsock.h> unsigned long PASCAL FAR inet_addr ...