/** 题目:hdu6006 Engineer Assignment 链接:http://acm.hdu.edu.cn/showproblem.php?pid=6006 题意:已知n个工程,每个需要某些领域的专家.有m个工程师,每个人擅长一些领域. m<=10 一个工程师只能参加一个工程.一个工程可以多个工程师参加. 如果参加某个工程的工程师他们擅长的领域覆盖了该工程需要的领域.那么该工程可以执行. 问最多可以执行多少个工程. 思路: 定义dp[i][s]表示前i个工程状态为s可以执行的最大工程…
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6006 题意: 在Google中,有个n项目,m个专家.第i个项目涉及c[i]个领域,分别为a[i][0]...a[i][c[i]-1].第i个专家精通d[i]个领域,分别为b[i][0]...b[i][d[i]-1]. 如果要完成一个项目,则这个项目所涉及到的每一个领域都必须至少有一个精通该领域的专家.你作为director,可以任意分配专家,但一个专家只能去做一个项目.问你最多能够完成多少个项目.…
Problem Description In Google, there are many experts of different areas. For example, MapReduce experts, Bigtable experts, SQL experts, etc. Directors need to properly assign experts to various projects in order to make the projects going smoothly.…
传送门 题意 给出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 #defi…
题意: n个工程,m个研究员,每个工程需要Ci个领域(X1,X2..Xci)的研究员 ,每个研究员会Di个不同的领域(X1,X2..Xdi),要完成一个工程必须使得分配给这个工程的研究员覆盖了这个工程所需的所有领域.问如何分配研究员可以使能供完成的工程数最多? n,m<=10;Ci<=3;Di<=2; 思路: 由于n很小,可以枚举出一个工程分配的所有方案(\(2^{11}-1\)),其中人员>3的方案可以舍弃(一定不是最优的).将状态压缩为1~\(2^{11}-1\)的数,从第一个…
https://codeforces.com/contest/1140/problem/E 局部dp + 定义状态取消后效性 题意 给你一个某些位置可以改变的字符串,假如字符串存在回文子串,那么这个字符串就是坏的,问有多少好的串(n<=2e5) 题解 首先发现只需要保证\(s[i-2]!=s[i]\)(局部保证),就可以保证不存在回文子串 直接计算有多少个好的串(即不存在回文子串的情况) 分奇偶位考虑,因为假如奇偶位都合理,那么就不存在1,2,3,2,1这种情况,这个序列考虑奇数位是1,3,1,…
https://codeforces.com/contest/1107/problem/E 题意 给出01字符串s(n<=100),相邻且相同的字符可以同时消去,一次性消去i个字符的分数是\(a[i]\),问消去s最多能得到多少分数 题解 实质是安排消去次序使得分数最大,第一步采取的行动是递归边界 因为只有01串,所以s被分成了一段一段,考虑段处理 预处理出一次性消去i个字符的最大分数\(f[i]\) 定义\(dp[l][r][cnt]\)为消去第l到第r段加上cnt个字符和第l段相同得到的最大…
Engineer Assignment Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Problem Description In Google, there are many experts of different areas. For example, MapReduce experts, Bigtable experts, SQL experts, etc. Dire…
思路:反状态压缩——把数据转换成20位的01来进行运算 因为只有20位,而且&,|,^都不会进位,那么一位一位地看,每一位不是0就是1,这样求出每一位是1的概率,再乘以该位的十进制数,累加,就得到了总体的期望. 对于每一位,状态转移方程如下: f[i][j]表示该位取前i个数,运算得到j(0或1)的概率是多少. f[i][1]=f[i-1][1]*p[i]+根据不同运算符和第i位的值运算得到1的概率. f[i][0]=f[i-1][0]*p[i]+根据不同运算符和第i位的值运算得到0的概率. 初…
题意 给定平面直角坐标系内的N(N <= 20)个点,每四个点构成一个正方形可以消去,问最多可以消去几个点. 思路 比赛的时候暴力dfs+O(n^4)枚举写过了--无意间看到有题解用状压DP(这才是正解吧T_T),然后自己才恍然大悟- --- 点不多嘛,用一个20位的整数表示各个点.先O(n^4)枚举出所有正方形情况,然后把这20位当背包,每种情况的二进制位当物品,做01背包就可以了. 似乎遇到N = 10+.20+的都应该想想状态压缩>.<-- 代码 [cpp] #include &l…