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 ...
随机推荐
- 【Python学习之十】yield之send方法
yield作用 简单地讲,yield 的作用就是把一个函数变成一个 generator,带有 yield 的函数不再是一个普通函数,Python 解释器会将其视为一个 generator.下面以斐波拉 ...
- ZendFramework-2.4 源代码 - 关于MVC - View层 - 控制器返回值
<?php class ReturnController extends AbstractActionController { public function returnAction() { ...
- Serializer序列器
定义Serializer 1. 定义方法 Django REST framework中的Serializer使用类来定义,须继承自rest_framework.serializers.Serializ ...
- django_mysql_配置
配置 1. 安装Pymysql pip install PyMySQL 然后在项目同名_init__添加 from pymysql import install_as_MySQLdb install_ ...
- (原创)task和function语法的使用讨论(Verilog,CPLD/FPGA)
1. Abstract function和task语句的功能有很多的相似之处,在需要有多个相同的电路生成时,可以考虑使用它们来实现.因为个人使用它们比较少,所以对它们没有进行更深的了解,现在时间比较充 ...
- 「微信小程序免费辅导教程」24,基础内容组件icon的使用探索与7月26日微信公众平台的更新解读
- Android stadio litepal
今天看到技术交流群里有人招聘Android,要求会litepal. 我立马百度了下.嗯,我的学习技术的精神,是值得称赞的. litepal就是操作数据库的一个框架.git地址: https://git ...
- day 16 JS DOM 继续
为什么有jquey了还学DOM ? 因为JQuey 是大而全,可能有10k 但是我们用到的只有1k 网站小没事,网站大流量就是问题 所以大网站都是自己用DOM 实现一个类似于JQuey 的适合自己 ...
- phpstorm将本地代码传递到远程服务器
由于对vim不太熟悉,效率比较低,作为过渡阶段,采用本地编写代码,然后上传到开发机上,进行调试 前提是服务器开启了ftp服务:http://www.cnblogs.com/redirect/p/693 ...
- laravel5.2总结--软删除
当模型被软删除时,它们并不会真的从数据库中被移除.而是会在模型上设置一个 deleted_at 属性并将其添加到数据库.如果对应模型被软删除,则deleted_at字段的值为删除时间,否则该值为空. ...