uva 10817(状压dp)
题意:就是有个学校要招老师.要让没门课至少有两个老师可以上.每个样样例先输入三个数字课程数量s,已经在任的老师数量,和应聘的老师数量.已经在任的一定要聘请.
思路是参考了刘汝佳书上的,关键如何状压。
- #include <cstdio>
- #include <iostream>
- #include <sstream>
- #include <cmath>
- #include <cstring>
- #include <cstdlib>
- #include <string>
- #include <vector>
- #include <map>
- #include <set>
- #include <queue>
- #include <stack>
- #include <algorithm>
- using namespace std;
- #define ll long long
- #define _cle(m, a) memset(m, a, sizeof(m))
- #define repu(i, a, b) for(int i = a; i < b; i++)
- #define repd(i, a, b) for(int i = b; i >= a; i--)
- #define sfi(n) scanf("%d", &n)
- #define pfi(n) printf("%d\n", n)
- #define sfi2(n, m) scanf("%d%d", &n, &m)
- #define pfi2(n, m) printf("%d %d\n", n, m)
- #define pfi3(a, b, c) printf("%d %d %d\n", a, b, c)
- #define MAXN 125
- #define MAXS 8
- const int INF = 0x3f3f3f3f;
- int c[MAXN], m, n, s, st[MAXN], d[MAXN][<<MAXS][<<MAXS];
- int dp(int i, int s0, int s1, int s2)
- {
- if(i == m + n) return s2 == (<<s) - ? : INF;
- int &ans = d[i][s1][s2];
- if(ans >= ) return ans;
- ans = INF;
- if(i >= m) ans = dp(i + , s0, s1, s2);
- int m0 = st[i] & s0, m1 = st[i] & s1;
- s0 ^= m0, s1 = (s1 ^ m1) | m0, s2 |= m1;
- ans = min(ans, c[i] + dp(i + , s0, s1, s2));
- return ans;
- }
- int main()
- {
- while()
- {
- sfi2(s, m), sfi(n);
- if(s == ) break;
- _cle(d, -);
- _cle(st, );
- char ch;
- int ss;
- repu(i, , m + n)
- {
- sfi(c[i]);
- while()
- {
- sfi(ss);
- ch = getchar();
- ss--;
- st[i] += (<<ss);
- if(ch == '\n') break;
- }
- }
- pfi(dp(, (<<s) - , , ));
- //pfi(d[m + n - 1][0][(1<<s) - 1]);
- }
- return ;
- }
uva 10817(状压dp)的更多相关文章
- UVA - 10817 状压DP
题意:大白P95 本题比较特别的是状压两个集合并且进行转移,因此要分别处理当前集合只有1个老师/2个老师的记录(然后可O(1)得出0个老师的集合) 记忆化过了但是迭代式不能记忆超过2的之前的状态是怎样 ...
- UVa 10817 (状压DP + 记忆化搜索) Headmaster's Headache
题意: 一共有s(s ≤ 8)门课程,有m个在职教师,n个求职教师. 每个教师有各自的工资要求,还有他能教授的课程,可以是一门或者多门. 要求在职教师不能辞退,问如何录用应聘者,才能使得每门课只少有两 ...
- UVa 11825 (状压DP) Hackers' Crackdown
这是我做状压DP的第一道题,状压里面都是用位运算来完成的,只要耐下心来弄明白每次位运算的含义,还是容易理解的. 题意: 有编号为0~n-1的n台服务器,每台都运行着n中服务,每台服务器还和若干台其他服 ...
- UVa 1252 (状压DP + 记忆化搜索) Twenty Questions
题意: 有n个长为m的各不相同的二进制数(允许存在前导0),别人已经事先想好n个数中的一个数W,你要猜出这个数. 每次只可以询问该数的第K为是否为1. 问采用最优询问策略,则最少需要询问多少次能保证猜 ...
- Hackers' Crackdown( UVA UVA 11825状压dp)
题意:N台电脑,现在有N种服务,现在你可以在每台电脑终止一项服务,他和他相邻的电脑都会被关闭,如果一项服务在所有电脑都没运行,该项服务成功被破坏,问最多能破坏几种服务. 分析:把n个集合分成尽量多组, ...
- UVA - 11795 状压DP
#include<iostream> #include<algorithm> #include<cstdio> #include<cstring> #i ...
- UVA - 11825 状压DP
该题目是EMAXX推荐的练习题,刘汝佳的书也有解说 如果S0属于全集,那S0就可以作为一个分组,那么S分组数可以是best{当前S中S0的补集+1} 对于集合类的题目我觉得有点抽象,希望多做多理解把 ...
- UVa 11795 状压DP Mega Man's Mission
kill[S]表示消灭机器人的集合为S,剩下的所能杀死的机器人集合. 设d(S)表示杀死机器人集合为S的方法数,答案为d((1<<n) - 1). d(S)可以由d(S')转移过来,其中S ...
- UVa 12235 状压DP Help Bubu
题解戳这 一开始没看懂题解,后来想明白以后,d(i, j, s, x)是考虑第i本书的时候,前面已经拿走了j本书,剩下的书的种类的二进制状态为s,剩下的最后一本书的编号为x,所能得到的最小混乱度. 这 ...
- 状压DP UVA 10817 Headmaster's Headache
题目传送门 /* 题意:学校有在任的老师和应聘的老师,选择一些应聘老师,使得每门科目至少两个老师教,问最少花费多少 状压DP:一看到数据那么小,肯定是状压了.这个状态不好想,dp[s1][s2]表示s ...
随机推荐
- 关于webrtc视频会议的解决方案
以我的经验来看视频会议分两种模式:网状模型,星型 1.网状模型 所谓的网状模型就是参加会议的人中每两个人建立一个点对点的连接. 比如:一个会议室有三个人A,B,C 基于网络模型就需要这样: 1.A和B ...
- js定义对象的几种容易犯的错误
//js定义对象的几种容易犯的错误function Person() { getName = function (){ console.info(1); }; return this;}//Perso ...
- javascript各种宽高
参考: http://www.w3cschool.cc/jsref/dom-obj-all.html http://www.cnblogs.com/wen12128/archive/2012/05/2 ...
- PHP将图片二进制转换
http://www.360doc.com/content/14/0325/10/947551_363526874.shtml
- Android study --- 广播
广播接收者 在Android系统运行时会产生很多事件,事件产生时,回想系统发送广播,只要向系统发送广播,系统就知道发生了相应的事件,从而执行相对应的代码.在系统中只要使用广播接受者,就可以接收广播 创 ...
- Unity仪表盘显示UGUI制作小心得
最近在做设备仪表参数参数显示,由于模型摆放位置经常修改,加之要求不能在模型的下面添加东西,显示界面的位置也不得不跟着修改,一来二去就烦了,想了解决办法,现在总结如下: 1.仍然在模型下面新建Panel ...
- java模式-工厂模式
今天在学习工厂模式,从最简单的简单工厂模式开始. 我们现在需要通过工厂Factory生产A,B两款产品(都是产品,实现了接口Product). 产品A: public class A implemen ...
- -[NSBundle initWithURL:]: nil URL argument'
今天早上同事突然跟我说趣拍的SDK不能用了,一调用就crash,我一听就纳了闷了,原来好好的啊. 然后就开始查呗,马上就要上线了,不搞好,老大会不会杀了我... 搞个全局断点,就停在了一堆我看不懂的界 ...
- Cheatsheet: 2016 05.01 ~ 05.31
Other Awesome Go - A curated list of awesome Go frameworks, libraries and software Visual Studio Cod ...
- Java轻量级业务层框架Spring两大核心IOC和AOP原理
IoC(Inversion of Control): IOC的基本概念是:不创建对象,但是描述创建它们的方式.在代码中不直接与对象和服务连接,但在配置文件中描述哪一个组件需要哪一项服务.容器负责将这些 ...