UVA565 Pizza Anyone?

大致题意:现在你要做一份披萨,有A到P共16种食材。现在给你1~12个人对这个披萨加入不同食材的条件(只包含想要和不想要两种)(加号是想要,减号是不想要,不一定包含所有食材),问你是否能选一些食材做披萨使得每一个人都存在一个条件是被满足了的(如果它不想要你也没放,这也算满足!)输出要求字典序最小!



$ solution: $

看到这道题应该想到的一些东西:

  1. 状态压缩,用1和0表示加入这种食材或不加
  2. 暴力搜索然后check,这一题范围太小了,只有16种食材,我们可以枚举放哪些(这样可以保证字典序)
  3. 然后每一个人对某些食材是否需要也可以状态压缩(这里的状压见后文)(之前写错了,不是爆搜)

但这道题还有一个神奇的优化,因为我们知道上述的第三点是不好做到的,因为有可能某一个人对一些食材并没有要求,这样我们如何来状压使的我们可以清晰的描述每一个人的要求呢?我们其实不难想到,我们可以对想要这种食材和不想要这种食材分开处理,用两个二进制数来表示!第一个二进制数某一位上为1表示想要,第二个二进制数某一位上为1表示不想要,这样我们就可以把我们爆搜得出来的数和第一个与运算(可以得到他们想要某些食材的要求是否得到满足),然后取反(1变0,0变1)再和第二个数与运算(可以得到他们不想要某些食材的要求是否得到满足),这样即使某一些人对某些食材没有要求也不会影响我们的答案了!



$ code: $

#include<iostream>
#include<cstdio>
#include<iomanip>
#include<algorithm>
#include<cstring>
#include<cstdlib>
#include<ctime>
#include<cmath>
#include<vector>
#include<queue>
#include<map>
#include<set> #define ll long long
#define db double
#define inf 0x7fffffff
#define rg register int using namespace std; char s[33];
int n,f,tot=1<<16;
int a[2][15]; int main(){
//freopen(".in","r",stdin);
//freopen(".out","w",stdout);
while(scanf("%s",s)!=EOF){
if(s[0]=='.'){ rg i,j;
for(i=0;i<tot;++i){
for(j=0;j<n;++j)
if(!(i&a[1][j])&&!(~i&a[0][j]))break;
if(j==n){
printf("Toppings: ");
for(rg k=0;k<16;++k)
if(i&(1<<k))putchar('A'+k);
puts(""); break;
}
}if(i==tot)puts("No pizza can satisfy these requests.");
n=0; for(i=0;i<15;++i)a[0][i]=a[1][i]=0; continue;
}
for(rg i=0;s[i]!=';';++i){
if(s[i]=='+')f=1;
if(s[i]=='-')f=0;
if(s[i]>='A'&&s[i]<='P')
a[f][n]|=1<<(s[i]-'A');
}++n;
}
return 0;
}

UVA565 Pizza Anyone? (状态压缩,搜索)的更多相关文章

  1. POJ 1632 Vase collection【状态压缩+搜索】

    题目传送门:http://poj.org/problem?id=1632 Vase collection Time Limit: 1000MS   Memory Limit: 10000K Total ...

  2. Codeforces3C. Tic-tac-toe 题解 状态压缩+搜索

    作者:zifeiy 标签:状态压缩.搜索 题目链接:https://codeforces.com/contest/3/problem/C 题目大意: 有一个 \(3 \times 3\) 的棋盘,给你 ...

  3. JZYZOJ 1385 拉灯游戏 状态压缩 搜索

    http://172.20.6.3/Problem_Show.asp?id=1385   刚开始想的时候一直以为同一排不同的拉灯顺序对结果是有影响的,手推了好多遍才发现拉灯结果只和拉的灯有关,这也要打 ...

  4. 搜索进阶课件,视频,代码(状态压缩搜索,折半搜索,dfs,bfs总结)

    链接:https://pan.baidu.com/s/1-svffrprCOO4CtQoCTQ9hQ 提取码:h909 复制这段内容后打开百度网盘手机App,操作更方便哦

  5. hdu4845 状态压缩BFS

    题意:      给一个n*m的矩阵,从11,走到nm,格子和格子之间可能有墙,也可能有门,有的格子上面有钥匙,相应的钥匙开相应的们,捡钥匙和开门都不需要时间,问你最少多少部能走到nm. 思路:   ...

  6. loj 1011(状态压缩+记忆化搜索)

    题目链接:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=25837 思路:状态压缩+记忆化搜索. #include<io ...

  7. 最大联通子数组之和(dfs,记忆化搜索,状态压缩)

    最大联通子数组,这次的题目,我采用的方法为dfs搜索,按照已经取到的数v[][],来进行搜索过程的状态转移,每次对v[][]中标记为1的所有元素依次取其相邻的未被标记为1的元素,将其标记为1,然而,这 ...

  8. Doing Homework---hdu1074(状态压缩&&记忆化搜索)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1074 有n(n<=15)门课需要做作业,每门课所需时间是used_time以及每门课作业上交的最 ...

  9. POJ 2046 Gap 搜索- 状态压缩

    题目地址: http://poj.org/problem?id=2046 一道搜索状态压缩的题目,关键是怎样hash. AC代码: #include <iostream> #include ...

随机推荐

  1. JS中Number(),parseInt(),parseFloat()和自动类型转换

    [参考来源] https://www.cnblogs.com/yi0921/p/6196841.html https://blog.csdn.net/u010200222/article/detail ...

  2. CUBA如何新增ServiceBean

    简单的方法 在页面MIDDLEWARE模块,可以直接新建.编辑.删除 复杂的方法 在代码中手动实现,则需要1.添加Serviceweb-spring.xml中,添加 <entry key=&qu ...

  3. day5 模拟购物车程序

    #__author__: Administrator #__date__: 2018/7/11 print(''' ======本公司退出以下产品======= 1.bicycle---------- ...

  4. Leetcode 217.存在重复元素 By Python

    给定一个整数数组,判断是否存在重复元素. 如果任何值在数组中出现至少两次,函数返回 true.如果数组中每个元素都不相同,则返回 false. 示例 1: 输入: [1,2,3,1] 输出: true ...

  5. 自学Aruba3.2-Aruba配置架构-Virtual AP配置要点

    点击返回:自学Aruba之路 自学Aruba3.2-Aruba配置架构-Virtual AP配置要点  1. AP.AP-Group和Virtual-AP的关系 解析列举:      AP1.AP3, ...

  6. 【BZOJ4591】[SHOI2015]超能粒子炮·改 (卢卡斯定理)

    [BZOJ4591][SHOI2015]超能粒子炮·改 (卢卡斯定理) 题面 BZOJ 洛谷 题解 感天动地!终于不是拓展卢卡斯了!我看到了一个模数,它是质数!!! 看着这个东西就感觉可以递归处理. ...

  7. source、sh、bash

    source.sh.bash../ 执行脚本的区别 1.source命令用法: source FileName 作用:在当前bash环境下读取并执行FileName中的命令.该filename文件可以 ...

  8. windows安装redis的正确姿势

    安装: 1,redis官方下载地址:https://redis.io/download,redis 64位下载地址:https://github.com/ServiceStack/redis-wind ...

  9. 搞定 Kubernetes 基于flannel 的集群网络

    .Docker网络模式 在讨论Kubernetes网络之前,让我们先来看一下Docker网络.Docker采用插件化的网络模式,默认提供bridge.host.none.overlay.maclan和 ...

  10. frp源码剖析-frp中的log模块

    前言&引入 一个好的log模块可以帮助我们排错,分析,统计 一般来说log中需要有时间.栈信息(比如说文件名行号等),这些东西一般某些底层log模块已经帮我们做好了.但在业务中还有很多我们需要 ...