poj 2288
解题思路
状压dp,记录路径条数,dp[S][i][j]表示状态为S,前一个点是i,再前一个点是j的最大值,然后在开个一样的数组记录方案数,时间复杂度O(2^n*n^2),注意要用long long,还有数据有一个点的情况。
代码
#include<iostream>
#include<cstdio>
#include<cstring>
#define int long long
using namespace std;
const int N = 14;
typedef long long LL;
const int inf = -0x3f3f3f3f;
inline int rd(){
int x=0,f=1;char ch=getchar();
while(!isdigit(ch)) {f=ch=='-'?0:1;ch=getchar();}
while(isdigit(ch)) {x=(x<<1)+(x<<3)+ch-'0';ch=getchar();}
return f?x:-x;
}
int q,n,m,a[N][N],val[N];
LL dp[1<<N][N][N],num[1<<N][N][N],ans,ans_num;
signed main(){
q=rd();
while(q--){
ans=0,ans_num=0;
memset(a,0,sizeof(a));
memset(dp,-0x3f,sizeof(dp));
memset(num,0,sizeof(num));
n=rd(),m=rd();register int x,y;
for(register int i=1;i<=n;i++) val[i]=rd();
for(register int i=1;i<=m;i++) {
x=rd(),y=rd();
a[x][y]=a[y][x]=1;
}
dp[0][0][0]=0;num[0][0][0]=1;
for(register int i=0;i<(1<<n)-1;i++)
for(register int j=1;j<=n;j++)if(!((1<<j-1)&i))
for(register int k=0;k<=n;k++)if(((1<<k-1)&i && a[j][k]) || k==0)
for(register int p=0;p<=n;p++)if(((1<<p-1)&i && a[p][k]) || p==0){
if(dp[i][k][p]==-inf) continue;
LL now=dp[i][k][p]+val[j]+(LL)val[j]*val[k];
if(a[j][p]) now+=(LL)val[j]*val[k]*val[p];
if(dp[i|(1<<j-1)][j][k]==now)
num[i|(1<<j-1)][j][k]+=num[i][k][p];
else if(dp[i|(1<<j-1)][j][k]<now){
dp[i|(1<<j-1)][j][k]=now;
num[i|(1<<j-1)][j][k]=num[i][k][p];
}
}
for(register int i=1;i<=n;i++)
for(register int j=1;j<=n;j++)
if(a[i][j]) {
if(dp[(1<<n)-1][i][j]>ans) {ans=dp[(1<<n)-1][i][j];ans_num=num[(1<<n)-1][i][j];}
else if(dp[(1<<n)-1][i][j]==ans) ans_num+=num[(1<<n)-1][i][j];
}
if(n==1 && m==0) {ans=val[1];ans_num=2;}
cout<<ans<<" "<<ans_num/2<<endl;
}
return 0;
}
poj 2288的更多相关文章
- poj 2288 tsp经典问题
题目链接:http://poj.org/problem?id=2288 #include<cstdio> #include<cstring> #include<iostr ...
- POJ 2288 Islands and Bridges(状压dp)
http://poj.org/problem?id=2288 题意: 有n个岛屿,每个岛屿有一个权值V,一条哈密顿路径C1,C2,...Cn的值为3部分之和: 第1部分,将路径中每个岛屿的权值累加起来 ...
- poj 2288 Islands and Bridges ——状压DP
题目:http://poj.org/problem?id=2288 状压挺明显的: 一开始写了(记忆化)搜索,但一直T: #include<iostream> #include<cs ...
- poj 2288 Islands and Bridges——状压dp(哈密尔顿回路)
题目:http://poj.org/problem?id=2288 不知为什么记忆化搜索就是WA得不得了! #include<iostream> #include<cstdio> ...
- poj 2288 Islands and Bridges
题意: 给你一个双向连通图,求 获得权值最大 的 哈密顿通路的 权值 和 这个权值对应的数目: 其中权值计算方法是 列如 ABCD 权值是a+b+c+d+ab+bc+cd 如果 A,B,C 和B ...
- DP:Islands and Bridges(POJ 2288)
2015-09-21 造桥基建工程 题目大意,就是有n座岛和k座桥,要你找一条哈密顿圈(找完所有的岛,并且每个岛只经过一次),当经过一座岛就加上岛的价值,如果两岛联通,则加上两座岛的价值之积,如果三座 ...
- Islands and Bridges(POJ 2288状压dp)
题意:给你一个图和每个点的价值,边权值为连接两点权值的积,走哈密顿通路,若到达的点和上上个点相连则价值加三点乘积,求哈密顿通路的最大价值,和最大价值哈密顿通路的条数. 分析:开始看这个题很吓人,但想想 ...
- poj 2288 Islands and Bridges_状态压缩dp_哈密尔顿回路问题
题目链接 题目描述:哈密尔顿路问题.n个点,每一个点有权值,设哈密尔顿路为 C1C2...Cn,Ci的权值为Vi,一条哈密尔顿路的值分为三部分计算: 1.每一个点的权值之和 2.对于图中的每一条CiC ...
- 【以前的空间】poj 2288 Islands and Bridges
一个不错的题解 : http://blog.csdn.net/accry/article/details/6607703 这是一道状态压缩.每个点有一个值,我们最后要求一个最值sum.sum由三部分组 ...
- POJ 2288 Islands and Bridges (状压DP,变形)
题意: 给一个无向图,n个点m条边,每个点有点权,要求找到一条哈密顿路径,使得该路径的f(path)值最大.输出f值,若有多条最大f值的路径,输出路径数量. f值由如下3点累加而来: (1)所有点权之 ...
随机推荐
- P1934 封印
P1934 封印 题目描述 很久以前,魔界大旱,水井全部干涸,温度也越来越高.为了拯救居民,夜叉族国王龙溟希望能打破神魔之井,进入人界“窃取”水灵珠,以修复大地水脉.可是六界之间皆有封印,神魔之井的封 ...
- VS2010-MFC(文档、视图和框架:概述)
转自:http://www.jizhuomi.com/software/221.html 前面几节讲了菜单.工具栏和状态栏的使用,本节开始将为大家讲解文档.视图和框架的知识. 文档.视图和框架简介 在 ...
- 杂项-IM:IM(即时通讯),一种基于互联网的即时交流消息的业务
ylbtech-杂项-IM:IM(即时通讯),一种基于互联网的即时交流消息的业务 即时通讯(Instant Messaging)是目前Internet上最为流行的通讯方式,各种各样的即时通讯软件也层出 ...
- jquery对于ajax的封装
第一层封装 $.ajax({ 属性名:值,属性名:值}) /* url: 请求服务器地址 data:请求参数 dataType:服务器返回数据类型 error 请求出错执行的功能 success 请求 ...
- mybatis中一对一关系映射
一对一关系中普通的配置方式 一.多表连接查询语句: <select id="selectStudentWithAddress" parameterType="int ...
- Python中好用的模块们
目录 Python中好用的模块们 datetime模块 subprocess模块 matplotlib折线图 importlib模块 Python中好用的模块们 datetime模块 相信我们都使 ...
- <scrapy爬虫>爬取360妹子图存入mysql(mongoDB还没学会,学会后加上去)
1.创建scrapy项目 dos窗口输入: scrapy startproject images360 cd images360 2.编写item.py文件(相当于编写模板,需要爬取的数据在这里定义) ...
- Spring 事务传播行为(12)
事务传播行为 指定是Spring中一个事务方法调用另一个事务方法时.处理的行为 使用方式: @Transactional(propagation=Propagation.REQUIRED) 事务的使用 ...
- java 实现websocket(转)
Java web项目使用webSocket 前端: <%@ page language="java" import="java.util.*" pag ...
- jmeter遇到的问题之Windows读取jtl文件出错
问题描述 ① 使用linux运行jmeter.jmx文件后生成result.jtl文件 jmeter -n -t /tmp/jmeter.jmx -l /tmp/testresult/result.j ...