记忆花搜索   dp

#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;
}

  

hdu 4971的更多相关文章

  1. HDU 4971 (最小割)

    Problem A simple brute force problem (HDU 4971) 题目大意 有n个项目和m个问题,完成每个项目有对应收入,解决每个问题需要对应花费,给出每个项目需解决的问 ...

  2. HDU 4971 A simple brute force problem.

    A simple brute force problem. Time Limit: 1000ms Memory Limit: 65536KB This problem will be judged o ...

  3. hdu - 4971 - A simple brute force problem.(最大权闭合图)

    题意:n(n <= 20)个项目,m(m <= 50)个技术问题,做完一个项目能够有收益profit (<= 1000),做完一个项目必须解决对应的技术问题,解决一个技术问题须要付出 ...

  4. HDU 4971 - A simple brute force problem【最大权闭合图】

    有n(20)个工程,完成每个工程获得收益是p[i],m(50)个需要解决的难题,解决每个难题花费是c[i] 要完成第i个工程,需要先解决ki个问题,具体哪些问题,输入会给出 每个难题之间可能有依赖关系 ...

  5. 【最小割】HDU 4971 A simple brute force problem.

    说是最大权闭合图.... 比赛时没敢写.... 题意 一共同拥有n个任务,m个技术 完毕一个任务可盈利一些钱,学习一个技术要花费钱 完毕某个任务前须要先学习某几个技术 可是可能在学习一个任务前须要学习 ...

  6. hdu 4971/ 2014多校/最大权闭合图

    题意:n个项目(每一个相应获得一定价值).m个技术问题(每一个须要支出一定价值),每一个项目必须要攻克若干个技术问题.技术难题之间有拓扑关系. 关键是建图.一看,第一感觉就是最大权闭合图,马上建好了图 ...

  7. hdu 4971 多校10最大权闭合图

    /* 很明显的最大权闭合图题 */ #include<stdio.h> #include<string.h> #include<queue> using names ...

  8. 漫话最小割 part1

    codeforces 724D [n个城市每个城市有一个特产的产出,一个特产的最大需求.当i<j时,城市i可以运最多C个特产到j.求所有城市可以满足最大的需求和] [如果直接最大流建图显然会T. ...

  9. HDOJ 2111. Saving HDU 贪心 结构体排序

    Saving HDU Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total ...

随机推荐

  1. mysql 增删查改

    非关系型数据库关系型数据库Oracle mysql sqlserver db2 Postgresql Sqlite access sqlserver 微软db2 ibm================ ...

  2. windows下安装python

    1. 进入python官网   https://www.python.org/downloads/windows/ 2.根据我们的电脑位数选择版本,尽量选择  Download Windows x86 ...

  3. html自己写响应式布局(说起来很高大上的样子,但是其实很简单)

    第一步,打开电脑中安装的Sublime Text3,新建demo文件夹用来存放文件,在里面新建一个HTML文件,通过Tab快捷键迅速创建一个HTML模板,并命名标题. 第二步,在Body标签里添加三个 ...

  4. 事件捕获 & 事件冒泡

    <body> <div id="div1"> <div id="div2"> <div id="div3&q ...

  5. uva12105 Bigger is Better

    更简单的做法:定义状态dp[i][j]表示在已经用了i根火柴的情况下拼出来了剩余部分(是剩余部分,不是已经拼出来了的)为j(需要%m)的最大长度,一个辅助数组p[i][j]表示状态[i][j]的最高位 ...

  6. JOIN和UNION的区别

    join 是两张表根据条件相同的部分合并生成一个记录集. SELECT Websites.id, Websites.name, access_log.count, access_log.dateFRO ...

  7. vue与node和npm关系

    (1)node功能 准确的说是使用vue-cli 脚手架搭建项目的时候需要nodejs.也可以用script标签引入vue.min.js这样的,在js里实例化vue也行. 使用node有几件事,打包部 ...

  8. git-忽略文件改动不进行提交

    命令:git update-index --assume-unchanged 文件名 作用:忽略文件的改动,但是不加入.gitignore 文件中,这样可以达到仅在本地目录中忽略,不影响其他团队成员的 ...

  9. java面试宝典第一弹

    object类的直接子类有哪些 Boolean Character Character.Subset Class ClassLoader Compiler Enum Math Number Packa ...

  10. 四、StaticList 和 DynamicList

    1.StaticList类模板 StaticList的设计要点:类模板 使用原生数组作为顺序存储空间 使用模板参数决定数组大小 template <typename T, int N> c ...