hdu 6006 Engineer Assignment
来源:互联网 发布:淘宝旺铺下载 编辑:程序博客网 时间:2024/06/06 01:46
题目链接:
http://acm.split.hdu.edu.cn/showproblem.php?pid=6006
题解:
状态压缩+类背包dp
代码:
#include <cmath>#include <vector>#include <queue>#include <cstdio>#include <cstring>#include <iostream>#include <algorithm>using namespace std;#define met(a,b) memset(a,b,sizeof(a))#define inf 0x3f3f3f3ftypedef long long ll;const int maxn = 10+10;vector<int>a[maxn],b[maxn];//int a[maxn][maxn],b[maxn][maxn];vector<int> num[2000];int p[150];int main(){ int t; scanf("%d",&t); int id=1; while(t--) { int n,m; scanf("%d%d",&n,&m); met(p,0); for(int i=0;i<20;i++) a[i].clear(); for(int i=0;i<20;i++) b[i].clear(); for(int i=0;i<=2000;i++) num[i].clear();// 项目的数量 for(int i=1;i<=n;i++) { int cnt; scanf("%d",&cnt); while(cnt--) { int num; scanf("%d",&num); a[i].push_back(num); } }// 工程师的数量 for(int i=0;i<m;i++) { int cnt; scanf("%d",&cnt); while(cnt--) { int num; scanf("%d",&num); b[i].push_back(num); } } for(int i=1;i<=n;i++) { for(int s=0;s<(1<<m);s++)// 枚举所有会组成的情况 { int cnt=0; met(p,0); for(int k=0;k<m;k++)// 查看当前的工程师是不是在这个情况里面 { if(s&(1<<k)) { cnt++; for(int j=0;j<b[k].size();j++) p[b[k][j]]=1; } } if(cnt>3) continue; bool flag=false; for(int j=0;j<a[i].size();j++)// 查看当前的项目是不是可以满足 { if(p[a[i][j]]==0) flag=true; } if(!flag) num[i].push_back(s); } } int dp[maxn][1<<11]; met(dp,0); for(int i=1;i<=n;i++) { for(int s=0;s<(1<<m);s++) {// 暴力枚举当前所有的情况 for(int j=0;j<num[i].size();j++) { if((s|num[i][j])==s)// 通过上面的筛选中,找到合适的满足情况的组合 { dp[i][s]=max(dp[i-1][s-num[i][j]]+1,dp[i][s]);// 类似于背包的更新 } } dp[i][s]=max(dp[i-1][s],dp[i][s]); } } printf("Case #%d: ",id++); printf("%d\n",dp[n][(1<<m)-1]); }}//1//3 4//3 40 77 64//3 10 40 20//3 40 20 77//2 40 77//2 77 64//2 40 10//2 20 77
阅读全文
0 0
- hdu 6006 Engineer Assignment
- HDU-6006-Engineer Assignment
- hdu 6006 Engineer Assignment(状压)
- hdu 6006 Engineer Assignment(状压dp)
- hdu 6006 Engineer Assignment(状压DP)
- Codeforces 101206 H & HDU 6006 Engineer Assignment
- Engineer Assignment HDU
- Engineer Assignment HDU
- HDU 6006 Engineer Assignment (状态压缩DP)
- HDU 6006 Engineer Assignment(状态压缩dp)
- HDU6006-Engineer Assignment
- Engineer Assignment dp
- HDU6006 Engineer Assignment 状压DP
- Assignment HDU
- HDU 2853 Assignment KM
- hdu 5289 Assignment
- HDU 5289 Assignment
- hdu 5289 Assignment
- 海量数据去重——布隆过滤器以及SimHash
- JAVA 通过命令行设置属性值
- 对xgboost原理的理解
- 深度学习 优化算法
- poj3436 网络流
- hdu 6006 Engineer Assignment
- 读书02《微习惯》
- Qt如何显示一个动态的变量或者说定时刷新界面
- BZOJ 3140 消毒 (二进制枚举降维 二分图最大匹配)
- Python difflib模块
- Java连接MySQL数据库——含步骤和代码
- HDU 2112-HDU Today
- ConcurrentHashMap源码详解
- 进程和线程,vmstat,iostat,dstat,