题目链接:http://poj.org/problem?id=2288

#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std; const int maxn = ;
typedef long long int ll_int; ll_int dp[maxn][maxn][<<maxn];
ll_int way[maxn][maxn][<<maxn];
int G[maxn][maxn];
int V[maxn]; int main()
{
freopen("E:\\acm\\input.txt","r",stdin);
int T;
cin>>T;
while(T--){
int n,m;
cin>>n>>m;
memset(G,,sizeof(G));
memset(dp,,sizeof(dp));
memset(way,,sizeof(way));
for(int i=;i<n;i++) cin>>V[i];
for(int i=;i<m;i++){
int x,y;
cin>>x>>y;
G[x-][y-] = ;
G[y-][x-] = ;
}
if(n == ){
printf("%d 1\n",V[]);
continue;
}
for(int i=;i<n;i++)
for(int j=i+;j<n;j++){
if(G[i][j]){
dp[i][j][(<<i)|(<<j)] = V[i] + V[j] + V[i]*V[j];
dp[j][i][(<<i)|(<<j)] = V[i] + V[j] + V[i]*V[j]; //先处理相邻的两点的;
way[i][j][(<<i)|(<<j)] = ;
way[j][i][(<<i)|(<<j)] = ;
}
}
int All = (<<n) - ;
for(int S = ;S <= All; S++){ //在每个状态下枚举状态内的点i,j,扩展出节点k.挺暴力的。
for(int i=;i<n;i++){
if(!(<<i & S)) continue;
for(int j=;j<n;j++){
if(!(<<j & S) || i == j || !dp[i][j][S]) continue;
for(int k=;k<n;k++){
if((<<k)&S || !G[j][k]) continue;
int r = S + (<<k);
ll_int q = dp[i][j][S] + V[k] + V[j]*V[k];
if(G[i][k]){
q += V[i]*V[j]*V[k];
}
if(q > dp[j][k][r]){
dp[j][k][r] = q;
way[j][k][r] = way[i][j][S];
}
else if(q == dp[j][k][r]){
way[j][k][r] += way[i][j][S];
}
}
}
}
}
ll_int ans,answay;
ans = ; answay = ;
for(int i=;i<n;i++)
for(int j=;j<n;j++){
if(i!=j){
if(dp[i][j][All] > ans){
ans = dp[i][j][All];
answay = way[i][j][All];
}
else if(dp[i][j][All] == ans ){
answay += way[i][j][All];
}
}
}
if(ans == ) printf("0 0\n");
else
printf("%I64d %I64d\n",ans,answay/); }
}

poj 2288 tsp经典问题的更多相关文章

  1. poj 2288 Islands and Bridges (状压dp+Tsp问题)

    这道题千辛万苦啊! 这道题要涉及到当前点和前面两个点,那就设dp[state][i][j]为当前状态为state,当前点为i,前一个点为j 这个状态表示和之前做炮兵那题很像,就是涉及到三个点时,就多设 ...

  2. poj3311 TSP经典状压dp(Traveling Saleman Problem)

    题目链接:http://poj.org/problem?id=3311 题意:一个人到一些地方送披萨,要求找到一条路径能够遍历每一个城市后返回出发点,并且路径距离最短.最后输出最短距离即可.注意:每一 ...

  3. POJ 2288 Islands and Bridges(状压dp)

    http://poj.org/problem?id=2288 题意: 有n个岛屿,每个岛屿有一个权值V,一条哈密顿路径C1,C2,...Cn的值为3部分之和: 第1部分,将路径中每个岛屿的权值累加起来 ...

  4. poj 2288 Islands and Bridges ——状压DP

    题目:http://poj.org/problem?id=2288 状压挺明显的: 一开始写了(记忆化)搜索,但一直T: #include<iostream> #include<cs ...

  5. poj 2288 Islands and Bridges——状压dp(哈密尔顿回路)

    题目:http://poj.org/problem?id=2288 不知为什么记忆化搜索就是WA得不得了! #include<iostream> #include<cstdio> ...

  6. poj 3311 tsp入门

    题意:n+1个点:0--n,找一条路径从0点出发遍历1--n的点再回到0,每个点可经过不止一次,求最短路径 裸的TSP问题,先用Floyd求出各个点之间最短路,再状压dp即可 用n+1位二进制表示状态 ...

  7. POJ 1182 (经典食物链 /并查集扩展)

    (參考他人资料) 向量偏移--由"食物链"引发的总结 http://poj.org/problem?id=1182这道食物链题目是并查集的变型.非常久曾经做的一次是水过的,这次 ...

  8. poj 2288 Islands and Bridges

    题意: 给你一个双向连通图,求 获得权值最大 的 哈密顿通路的 权值 和 这个权值对应的数目: 其中权值计算方法是  列如 ABCD  权值是a+b+c+d+ab+bc+cd 如果 A,B,C  和B ...

  9. POJ 1201 Intervals (经典) (差分约束)

    <题目链接> 题目大意:给你$n$段区间,$a_i,b_i,c_i$ 表示在 $[a_i,b_i]$ 区间内至少要选择$c_i$个点.现在问你在满足这n个条件的情况下,最少要选多少个点? ...

随机推荐

  1. 深入理解shared pool共享池之library cache系列一

    结论 1,oradebug dump library_cache不同级别dump的library cache内容及粒度会有所区别,具体见测试开始部分2,本文测示基于oradebug dump libr ...

  2. mysql5.7下载与安装,php5.6与mysql5.7整合

    Part1 mysql5.7下载 百度“mysql下载”,打开官网    2. 在页面右上角点击,注册/登录 3. 登录后显示下载页面,选择windows 4. 然后选择MySQL Installer ...

  3. VMWare10安装Ubuntu 13.10过程

    把这当成自己的第一篇文章吧,准备工作环境切换到linux,选择Ubuntu 13.10桌面版,Ubuntu官网下载 先安装VMWare10,这个没什么可说的,安装好后启动,点击"新建虚拟机& ...

  4. gcc/g++命令认识

    gcc & g++是gnu中最主要和最流行的c & c++编译器 . g++用来针对c++的处理命令,以.cpp为后缀,对于c语言后缀名一般为.c.这时候命令换做gcc即可. 下面以T ...

  5. 初级SQL开发汇总指南

    汇总部分内容来自网络(作者  :zhtbs),比较基础的东西,能够了解比较基础的一些东西. Select语句概要 数据库中数据的提取(查询)使用select 语法,主要有以下几点作用 l  提取的数据 ...

  6. IntelIoT技术笔记Maven

    1.Maven project facet配置 错误信息: One or more constraints have not been satisfied.以及Cannot change versio ...

  7. Django 1

    Django 1.10文档中文版Part1 本文是博主翻译的Django1.10版本官方文档的第一部分,如时间充裕,争取一直翻译下去,经验不足,或有错漏,敬请指正.另外对于公开文档进行翻译的版权问题不 ...

  8. 2013Java最新面试题

    更新时间:2015-04-07         来源:网络         投诉删除 [看准网(Kanzhun.com)]Java面试题频道小编搜集的范文“2013Java最新面试题”,供大家阅读参考 ...

  9. MongoDB update数据语法【转】

    在前面的文章“mongodb 查询的语法”里,我介绍了Mongodb的常用查询语法,Mongodb的update操作也有点复杂,我结合自己的使用经验,在这里介绍一下,给用mongodb的朋友看看,也方 ...

  10. go 语言与循环

    package main import "fmt" type Employee struct{name string; age int} func displayName(e *E ...