Codeforces 101206 H & HDU 6006 Engineer Assignment
来源:互联网 发布:软件版权声明格式 编辑:程序博客网 时间:2024/06/07 05:03
题意:给定
数据范围:
思路:预处理每个任务
那么对于状态:
有:
其中
#include<iostream>#include<cstdio>#include<cmath>#include<string>#include<cstring>#include<stack>#include<queue>#include<map>#include<algorithm>#include<bitset>#include<vector>#include <functional>using namespace std;typedef long long ll;typedef pair<ll, ll>pii;typedef bitset<101> bs;#define sp system("pause")bs p[15], e[15];vector<int>pw[15];int dp[15][(1 << 13)];void init(){ memset(dp, -1, sizeof dp); for (int i = 0; i < 15; i++)p[i].reset(), e[i].reset(),pw[i].clear();}int main(){ int T; cin >> T; int cas = 1; while (T--) { init(); int n, m; scanf("%d%d", &n, &m); for (int i = 0; i < n; i++) { int x; scanf("%d", &x); for (int j = 0; j < x; j++) { int y; scanf("%d", &y); p[i][y] = 1; } } for (int i = 0; i < m; i++) { int x; scanf("%d", &x); for (int j = 0; j < x; j++) { int y; scanf("%d", &y); e[i][y] = 1; } } for (int i = 0; i < n; i++) { for (int j = 0; j < (1 << m); j++) { bs now; for (int k = 0; k < m; k++)if (j&(1 << k))now |= e[k]; if ((now&p[i]) == p[i])pw[i].push_back(j); } } for (int i = 0; i < pw[0].size(); i++) dp[0][pw[0][i]] = 1; for (int i = 0; i < (1 << m); i++)if (dp[0][i] == -1)dp[0][i] = 0; int ans = 0; for (int i = 1; i < n; i++) { for (int j = 0; j < (1 << m); j++) { if (dp[i - 1][j] == -1)continue; if (dp[i][j] == -1)dp[i][j] = dp[i - 1][j]; else dp[i][j] = max(dp[i][j], dp[i - 1][j]); for (int k = 0; k < pw[i].size(); k++) { int now = pw[i][k]; if ((now&j) == 0) { if (dp[i][now | j] == -1)dp[i][now | j] = dp[i - 1][j] + 1; else dp[i][now | j] = max(dp[i][now | j], dp[i - 1][j] + 1); } } } } for (int i = 0; i < n; i++)for (int j = 0; j < (1 << m); j++) ans = max(ans, dp[i][j]); printf("Case #%d: %d\n", cas++, ans); }}
阅读全文
0 0
- Codeforces 101206 H & HDU 6006 Engineer Assignment
- hdu 6006 Engineer Assignment
- HDU-6006-Engineer Assignment
- hdu 6006 Engineer Assignment(状压)
- hdu 6006 Engineer Assignment(状压dp)
- hdu 6006 Engineer Assignment(状压DP)
- 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
- 【python 爬虫】伪造UA字符串
- 5000 的阶乘
- [OpenGL] 利用Shader实现复杂地形的渲染
- javaEE之JSP
- 深度学习常用优化方法
- Codeforces 101206 H & HDU 6006 Engineer Assignment
- LeetCode#513 Find Bottom Left Tree Value题解(C++版)
- Java 构造方法的修饰符
- eclipse与虚拟内存
- http协议
- hdu4578
- 定义函数-学习笔记
- Qt实现正弦曲线图(类似示波器功能)
- javascript中的浅复制与深复制