hdu 4971
来源:互联网 发布:elvis elvin 知乎 编辑:程序博客网 时间:2024/05/21 22:22
不会最大流 但我觉得状态不会太多 记忆话搜索过的
#include <cstdio>#include <cstdlib>#include <cmath>#include <set>#include <stack>#include <vector>#include <sstream>#include <cstring>#include <string>#include <map>#include <queue>#include <algorithm>#include <iostream>#define FFI freopen("in.txt", "r", stdin)#define maxn 1010#define INF 0x3f3f3f3f#define inf 1000000000#define mod 1000000007#define ULL unsigned long long#define LL long long#define _setm(houge) memset(houge, INF, sizeof(houge))#define _setf(houge) memset(houge, -1, sizeof(houge))#define _clear(houge) memset(houge, 0, sizeof(houge))using namespace std; int t, n, m, ca;int pro[25], _cost[55], g[55][55];LL nee[25], pre[55];bool vis[55];int k[25], q[25][55];map <LL, int> pp; LL dfs(int u) { if(vis[u]) return pre[u]; vis[u] = 1; pre[u] |= 1LL << u; for(int i = 0; i < m; ++ i) { if(g[u][i]) { pre[u] |= dfs(i); } } return pre[u];} int DP(LL cur) { if(pp.count(cur)) return pp[cur]; int dd = 0, cc = 0; for(int i = 0; i < n; ++ i) { if((nee[i] & cur) == nee[i]) { dd += pro[i]; } } for(int i = 0; i < m; ++ i) { if((cur & (1LL << i))) { cc += _cost[i]; } } pp[cur] = dd-cc; for(int i = 0; i < n; ++ i) { if((nee[i] & cur) != nee[i]) { pp[cur] = max(pp[cur], DP(cur|nee[i])); } } return pp[cur];} int main () { // FFI; scanf("%d", &t); ca = 0; while(t --) { scanf("%d%d", &n, &m); _clear(nee); pp.clear(); for(int i = 0; i < n; ++ i) { scanf("%d", &pro[i]); } for(int i = 0; i < m; ++ i) { scanf("%d", &_cost[i]); } for(int i = 0; i < n; ++ i) { scanf("%d", &k[i]); for(int j = 0; j < k[i]; ++ j) { scanf("%d", &q[i][j]); } } for(int i = 0; i < m; ++ i) { for(int j = 0; j < m; ++ j) { scanf("%d", &g[i][j]); } } _clear(pre); _clear(vis); for(int i = 0; i < m; ++ i) { if(!vis[i]) { dfs(i); } } for(int i = 0; i < n; ++ i) { for(int j = 0; j < k[i]; ++ j) { nee[i] |= pre[q[i][j]]; } } printf("Case #%d: %d\n", ++ ca, DP(0)); } return 0;}
0 0
- hdu 4971
- hdu 4971
- hdu 4971
- hdu
- hdu
- HDU
- hdu ()
- hdu
- hdu
- HDU
- HDU
- hdu
- hdu
- HDU
- Hdu
- hdu
- hdu-
- hdu
- AbsListView android:smoothScrollbar
- notifyDataSetChanged() 动态更新ListView
- Dictionary的遍历方法
- Vector用法
- Swift SpriteKit 忍者无敌
- hdu 4971
- 位运算符
- 字符串翻转(顺序翻转,每个子字符串顺序不变)
- java基础之Properties
- 创建JavaBean
- 关于break语句与switch语句
- 《领域驱动设计 软件核心复杂性应对之道》 - 书摘精要
- sm 528 T1 && T2
- leetcode - Path Sum