HDU6006:Engineer Assignment(状压DP)
传送门
题意
给出n个工程,m个工程师,每个工程和工程师需要/拥有若干个技能,询问能够完成的最大工程个数,每个工程师用一次
分析
dp[i][j]表示前i个工程用的工程师集合为j的最大工程个数,那么有dp[i][j]=max(dp[i-1][j],dp[i-1][j^x]+1),用way[i]记录第i个工程可行的方案,然后转移就行了
trick
代码
#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define F(i,a,b) for(int i=a;i<=b;++i)
#define R(i,a,b) for(int i=a;i<b;++i)
#define mem(a,b) memset(a,b,sizeof(a))
int dp[11][1111];
vector<int>a[11];
int numa[11];
int numb[11];
vector<int>b[11];
vector<int>way[11];
int t;
int n,m;
int vis[101];
int main()
{
scanf("%d",&t);
F(qq,1,t)
{
scanf("%d %d",&n,&m);
int x;
F(i,1,n)
{
a[i].clear();
way[i].clear();
scanf("%d",numa+i);
F(j,1,numa[i]) {scanf("%d",&x);a[i].push_back(x);}
}
F(i,1,m)
{
b[i].clear();
scanf("%d",numb+i);
F(j,1,numb[i]) { scanf("%d",&x);b[i].push_back(x); }
}
int flag;
mem(dp,0);
R(i,1,(1<<m))
{
mem(vis,0);
flag=1;
for(int j=1;j<=m;++j) if(i&(1<<(j-1)))
{
for(int k=0;k<numb[j];++k) vis[b[j][k]]=1;
}
for(int j=1;j<=n;++j)
{
flag=1;
for(int k=0;k<numa[j];++k) if(vis[a[j][k]]==0){ flag=0;break; }
if(flag) {way[j].push_back(i);dp[j][i]=1;}
}
}
F(i,1,n)R(j,1,(1<<m))
{
dp[i][j]=max(dp[i][j],dp[i-1][j]);
int sz=way[i].size();
R(k,0,sz)
{
x=way[i][k];
if((x&j)==x) dp[i][j]=max(dp[i][j],dp[i-1][j^x]+1);
}
}
int ans=0;
R(i,0,(1<<m)) ans=max(ans,dp[n][i]);
printf("Case #%d: %d\n",qq,ans);
}
return 0;
}
HDU6006:Engineer Assignment(状压DP)的更多相关文章
- hdu 6006 Engineer Assignment 状压dp
Engineer Assignment Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Othe ...
- HDU - 6006 Engineer Assignment (状压dfs)
题意:n个工作,m个人完成,每个工作有ci个阶段,一个人只能选择一种工作完成,可以不选,且只能完成该工作中与自身标号相同的工作阶段,问最多能完成几种工作. 分析: 1.如果一个工作中的某个工作阶段没有 ...
- Engineer Assignment HDU - 6006 状压dp
http://acm.split.hdu.edu.cn/showproblem.php?pid=6006 比赛的时候写了一个暴力,存暴力,过了,还46ms 那个暴力的思路是,预处理can[i][j]表 ...
- HITOJ 2662 Pieces Assignment(状压DP)
Pieces Assignment My Tags (Edit) Source : zhouguyue Time limit : 1 sec Memory limit : 64 M S ...
- hdu6006 Engineer Assignment 状态dp 定义dp[i][s]表示前i个工程状态为s可以执行的最大工程数。s表示前i个工人选走了s状态的工程师。
/** 题目:hdu6006 Engineer Assignment 链接:http://acm.hdu.edu.cn/showproblem.php?pid=6006 题意:已知n个工程,每个需要某 ...
- BZOJ 1087: [SCOI2005]互不侵犯King [状压DP]
1087: [SCOI2005]互不侵犯King Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 3336 Solved: 1936[Submit][ ...
- nefu1109 游戏争霸赛(状压dp)
题目链接:http://acm.nefu.edu.cn/JudgeOnline/problemShow.php?problem_id=1109 //我们校赛的一个题,状压dp,还在的人用1表示,被淘汰 ...
- poj3311 TSP经典状压dp(Traveling Saleman Problem)
题目链接:http://poj.org/problem?id=3311 题意:一个人到一些地方送披萨,要求找到一条路径能够遍历每一个城市后返回出发点,并且路径距离最短.最后输出最短距离即可.注意:每一 ...
- [NOIP2016]愤怒的小鸟 D2 T3 状压DP
[NOIP2016]愤怒的小鸟 D2 T3 Description Kiana最近沉迷于一款神奇的游戏无法自拔. 简单来说,这款游戏是在一个平面上进行的. 有一架弹弓位于(0,0)处,每次Kiana可 ...
随机推荐
- ORA-00600: internal error code, arguments: [2662], [0], [1106971], [0], [1107731], [12583040]
今天是2014-06-06,在进行数据库恢复的时候出现了一个久违的ora-600 [2662]错误.特整理例如以下: 问题描写叙述: system及数据文件误删,採用恢复数据文件的方式将数据库恢复到開 ...
- Hadoop集群_HDFS初探之旅
1.HDFS简介 HDFS(Hadoop Distributed File System)是Hadoop项目的核心子项目,是分布式计算中数据存储管理的基础,是基于流数据模式访问和处理超大文件的需求而开 ...
- 图像处理之增强---图像增强算法四种,图示与源码,包括retinex(ssr、msr、msrcr)和一种混合算法
申明:本文非笔者原创,原文转载自:http://blog.csdn.net/onezeros/article/details/6342661 两组图像:左边较暗,右边较亮 第一行是原图像,他们下面是用 ...
- Java之运行时异常与编译时异常区别
Java中用2种方法处理异常: 1.在发生异常的地方直接处理: 2.将异常抛给调用者,让调用者处理. Java异常可分为3种: (1)编译时异常:Java.lang.Exception (2)运行期异 ...
- struts2的核心和工作原理 (转)
转自--------http://blog.csdn.net/laner0515/article/details/27692673 在学习struts2之前,首先我们要明白使用struts2的目的是什 ...
- REUSE_ALV_GRID_DISPLAY_LVC 的user_command
*&--------------------------------------------------------------------* *& Form CALL_FUNCTIO ...
- 【LeetCode】Rotate List
Given a list, rotate the list to the right by k places, where k is non-negative. For example:Given 1 ...
- php memcache知识点总结
$memcache = new Memcache; $memcache->connect('localhost',11211) or die('Could not connect'); //me ...
- Codeforces Round #383 (Div. 2) C. Arpa's loud Owf and Mehrdad's evil plan —— DFS找环
题目链接:http://codeforces.com/contest/742/problem/C C. Arpa's loud Owf and Mehrdad's evil plan time lim ...
- codeforces 460C. Present 解题报告
题目链接:http://codeforces.com/submissions/ywindysai 题目意思:有 n 朵花,每朵花都有一定的高度(第 i 朵花对应 ai),m 天之后要把这些花送给别人. ...