题目链接: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. 查看xcode的路径

    sudo /usr/libexec/locate.updatedb locate liblaunch_sim

  2. iOS 知识-常用小技巧大杂烩

    原文链接:http://www.jianshu.com/p/7c3ee5e67d03. 自己看的. 1,打印View所有子视图 po [[self view]recursiveDescription] ...

  3. WPF中TreeView数据结构解析

    XAML.CS代码: using System; using System.Collections.Generic; using System.Linq; using System.Text; usi ...

  4. [lua]尝试一种Case语法糖

    function CaseT(arg) function proxy(caller) caller.yield(r) end -- proxy return function (cond) if (c ...

  5. OC中常用的字符处理

    NSString *str1 = @"BeiJing"; NSString *str2 = @"beijing"; //全部转为大写 NSLog(@" ...

  6. 上传图片带预览功能兼容IE和火狐等主流浏览器

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  7. yii下多条件多表组合查询以及自写ajax分页

    多条件组合查询主要用到yii的CDbCriteria,这个类很多oem框架都有,非常好用. 前台表单 前台查询表单效果是这样的,多个条件组,每个组里放多个input,name为数组.当任何一个复选框被 ...

  8. WAMP(Windows+Apache+Mysql+PHP)环境搭建

    学习PHP已经有一段时间,一直没有写过关于开发环境搭建的笔记,现在补上吧,因为安装配置的步骤记得不是很清楚,借鉴了一些别人的经验,总结如下: 首先去官方网站下载各个软件,下载需要的版本: Apache ...

  9. Android PackageManager packages.xml文件格式

    packages.xml文件存放在/data/system目录下    该文件记录了系统中所有应用程序的包管理相关信息    PmS根据该文件进行包管理的各种操作 标签名称 所包含的值举例 last- ...

  10. RabbitMQ安装简单过程

    找到一本ACTION IN RABBITMQ,仔细看.现在先安装起来.. 参考主要的URL,包括安装,用户管理,权限管理.我用的都是最新版本. http://my.oschina.net/indest ...