zoj 3471 Most Powerful (有向图)最大生成树 状压dp
题目链接
题意
\(N\)种气体,\(i\)气体与\(j\)气体碰撞会:
- 产生\(a[i][j]\)的威力;
- 导致\(j\)气体消失。
求产生威力之和的最大值。
思路
和前几题找图上路径的题不一样,该题如果抽象成图上的问题,则为:
在有向连通图中找一棵树,对于每一对\((parent,child)\)关系对,\(parent\)相当于这里的气体\(i\),\(child\)相当于这里的气体\(j\),要使得树上的边权值最大。
但状态的表示倒是仍然可以借鉴。
状态:\(1\)表示消失了的气体,\(0\)表示仍存在的气体。
\(dp[state][p]\):表示\(p\)气体消失后到达\(state\)时的威力最大值。
所以应采用二重循环,一重在所有的\(1\)中枚举消失了的气体,另一重在所有的\(0\)中枚举使之消失的气体。
Code
#include <bits/stdc++.h>
#define F(i, a, b) for (int i = (a); i < (b); ++i)
#define F2(i, a, b) for (int i = (a); i <= (b); ++i)
#define dF(i, a, b) for (int i = (a); i > (b); --i)
#define dF2(i, a, b) for (int i = (a); i >= (b); --i)
#define maxn 10
#define maxs 1100
using namespace std;
typedef long long LL;
int n, dp[maxs][maxn], dis[maxn][maxn];
bool vis[maxs][maxn];
int dfs(int state, int p) {
if (!state) return 0;
if (vis[state][p]) return dp[state][p];
vis[state][p] = true;
int sta = state - (1<<p), ans = 0;
F(i, 0, n) {
if (!(sta&(1<<i))) continue;
int temp = dfs(sta, i);
F(j, 0, n) {
if (!(sta&(1<<j))) ans = max(ans, temp+dis[j][i]);
}
}
return dp[state][p] = ans;
}
void work() {
memset(dis, 0, sizeof dis);
memset(dp, 0, sizeof dp);
memset(vis, 0, sizeof vis);
F(i, 0, n) {
F(j, 0, n) {
scanf("%d", &dis[i][j]);
}
}
int ans = 0;
F(i, 0, n) {
int state = (1<<n)-1-(1<<i);
F(j, 0, n) {
if (i==j) continue;
ans = max(ans, dfs(state, j)+dis[j][i]);
}
}
printf("%d\n", ans);
}
int main() {
while (scanf("%d",&n)!=EOF&&n) work();
return 0;
}
zoj 3471 Most Powerful (有向图)最大生成树 状压dp的更多相关文章
- CCPC-Wannafly Winter Camp Day3 Div1 - 精简改良 - [生成树][状压DP]
题目链接:https://zhixincode.com/contest/14/problem/D?problem_id=206 样例输入 1 5 5 1 2 1 1 3 1 2 4 1 2 5 1 ...
- zoj 3471 Most Powerful
题目链接:zoj 3471 Most Powerful 作者:jostree 转载请说明出处 很经典的状态dp,使用i的二进制位表示粒子的状态,0表示存在,1表示不存在.dp[i]表示在状态i的情况 ...
- 【状压dp】Most Powerful
[ZOJ3471]Most Powerful Time Limit: 2 Seconds Memory Limit: 65536 KB Recently, researchers on Ma ...
- [BZOJ1494][NOI2007]生成树计数 状压dp 并查集
1494: [NOI2007]生成树计数 Time Limit: 5 Sec Memory Limit: 64 MBSubmit: 793 Solved: 451[Submit][Status][ ...
- Problem Arrangement ZOJ - 3777(状压dp + 期望)
ZOJ - 3777 就是一个入门状压dp期望 dp[i][j] 当前状态为i,分数为j时的情况数然后看代码 有注释 #include <iostream> #include <cs ...
- ZOJ 3306 状压dp
转自:http://blog.csdn.net/a497406594/article/details/38442893 Kill the Monsters Time Limit: 7 Seconds ...
- ZOJ 3723 (浙大月赛)状压DP
A了一整天~~~终于搞掉了. 真是血都A出来了. 题目意思很清楚,肯定是状压DP. 我们可以联系一下POJ 1185 炮兵阵地,经典的状压DP. 两道题的区别就在于,这道题的攻击是可以被X挡住的,而 ...
- hdu5304 Eastest Magical Day Seep Group's Summer 状压dp+生成树
题目:http://acm.hdu.edu.cn/showproblem.php?pid=5304 16个点的无向图,问能生成多少个n条边的连通图.(即多一条边的树) 先n^3 * 2^n 枚举全部的 ...
- ZOJ 3777 - Problem Arrangement - [状压DP][第11届浙江省赛B题]
题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3777 Time Limit: 2 Seconds Me ...
随机推荐
- 十五、MySQL DELETE 语句
MySQL DELETE 语句 你可以使用 SQL 的 DELETE FROM 命令来删除 MySQL 数据表中的记录. 你可以在 mysql> 命令提示符或 PHP 脚本中执行该命令. 语法 ...
- 选择 NoSQL 数据库需要考虑的 10 个问题
那么我为什么要写这篇文章呢? 是因为我认为NoSQL解决方案不如RDBMS解决方案吗?当然不! 是因为我专注于SQL的做事方式,而不想陷入一种相对较新的技术的不确定性吗?不,也不是!事实上,我非常兴奋 ...
- vue.js 一(基础环境搭建)
之前由于看了React的东西,写了两篇React的脚手架搭建,一是给自己记一点可用的东西,免得每次都去找,毕竟搭建环境在项目相对固定的时期不是经常要干的事情,一段时间不用就会忘记了. 前端的js框架还 ...
- 用express框架实现反向代理
目前很多公司开发都是前后台分离开发,于是我用node起了一个服务,用node中的express框架实现了反向代理.(通俗易懂的讲就是我在我的电脑访问不到后台同事的电脑接口,这样做以后就可以在我本地访问 ...
- JZOJ 3470. 【NOIP2013模拟联考8】最短路(path)
470. [NOIP2013模拟联考8]最短路(path) (Standard IO) Time Limits: 1000 ms Memory Limits: 262144 KB Detailed ...
- Python入门第一课——Python的起源、发展与前景!
我们在做任何一件事情之前,我们都会通过各种渠道去搜集事情的信息,了解事情的来龙去脉,学习一门编程语言也是如此,只有知根知底,我们才能有明确的方向和目标,以及底气去完成这件事情,今天我带大家来看看Pyt ...
- du 与df 统计系统磁盘不一致原因与解决方法
事件起因: 同事发现云主机磁盘系统盘满了,准备清理系统盘,便利用du 命令统计了根目录下各文件夹的大小,发现统计的各文件夹的大小总和 加起来比 df 命令查看到的系统盘所使用空间 要小很多.这里记录下 ...
- win10桌面显示我的电脑
1.桌面单击右键菜单栏,选中单击个性化 2.选择主题->桌面图标设置 3.勾选需要显示或不显示的图标
- 893E - Counting Arrays
E. Counting Arrays time limit per test 3 seconds memory limit per test 256 megabytes input standard ...
- [原]sencha touch之表单(login demo)
现在来说说sencha touch中的表单,举个简单的login的例子,相关的说明我都放在了注释中,看下面代码 Ext.application({ id:'itKingApp', launch:fun ...