没看过TSP,先mark

 //4838039 2011-10-27 23:04:15 Accepted 4026 2343MS 31044K 3143 B C++ Geners
//状态压缩DP的TSP问题
//优先级位运算小于判等 , 还有各种细节各种出错
#include <cstdio>
#include <cstring>
#include <stdlib.h>
#define mabs(a) (a>0?a:-(a)) using namespace std; typedef long long ll;
const int maxn=<<;
int gcd(int a, int b)
{
return b?gcd(b, a%b):a;
} int g[][];
int map[][], cnt;
int n, m;
ll dp[maxn][];
struct Node {
int x,y;
}node[]; void init ()
{
for (int i= ; i< ; ++i)
for (int j= ; j< ; ++j)
g[i][j]=gcd(i, j);
} bool valid(int sta, int k, int pre)
{
int x=node[k].x,xx=node[pre].x;
int y=node[k].y,yy=node[pre].y; if(map[x][y]> || map[xx][yy]>)
return false;//如果2个点不都是0。
int d=g[mabs(x-xx)][mabs(y-yy)];
for (int i= ; i<=d ; ++i)
{
int tmpx=xx+i*(x-xx)/d;
int tmpy=yy+i*(y-yy)/d;
if(map[tmpx][tmpy] == )
return false;//中间点forbidden
if(map[tmpx][tmpy] <= )
{
if((sta&(<<(-map[tmpx][tmpy]))) == )
{
return false;
}//中间有未遍历的0。
}
}
return true;
} void DP()
{
memset (dp, , sizeof(dp));
int limit=<<cnt;
for (int i= ; i<limit ; ++i)
{
for (int j= ; j<cnt ; ++j)
{
dp[<<j][j]=1ll;//初始以每个点开始的情况
if(i&(<<j))
for (int k= ; k<cnt ; ++k)
{
if(k==j)continue;
if(i^(<<j)& (<<k) ) //k是从此时出发的点,j是要去的点
if(valid(i,j,k))
{
dp[i][j]+=dp[i^(<<j)][k];
}
}
}
}
ll ans=0ll;
for (int i= ; i<cnt ; ++i)
ans+=dp[limit-][i];
printf("%I64d\n", ans); } int main ()
{
init ();
while (~scanf("%d%d", &n, &m))
{
cnt=;
for (int i= ; i<n ; ++i)
{
for (int j= ; j<m ; ++j)
{
scanf("%d",&map[i][j]);
if(map[i][j] == )
{
node[cnt].x=i;
node[cnt].y=j;
map[i][j]=-cnt;//映射到小于等于0
cnt++;
}
//printf(" %d \n",map[i][j]);
}
}
DP();
}
return ;
}

hdu 4026 2011上海赛区网络赛F TSP ****的更多相关文章

  1. hdu 4025 2011上海赛区网络赛E 压缩 ***

    直接T了,居然可以这么剪枝 题解链接:点我 #include<cstdio> #include<map> #include<cstring> #define ll ...

  2. hdu 4045 2011北京赛区网络赛F 组合数+斯特林数 ***

    插板法基础知识 斯特林数见百科 #include<iostream> #include<cmath> #include<cstdio> #include<cs ...

  3. hdu 4036 2011成都赛区网络赛F 模拟 **

    为了确保能到达终点,我们需要满足下面两个条件 1.能够到达所有山顶 2.能够在遇到苦土豆时速度大于他 二者的速度可以用能量守恒定律做,苦土豆的坐标可通过三角形相似性来做 #include<cst ...

  4. hdu 4023 2011上海赛区网络赛C 贪心+模拟

    以为是贪心,结果不是,2333 贪心最后对自己绝对有利的情况 点我 #include<cstdio> #include<iostream> #include<algori ...

  5. hdu 4028 2011上海赛区网络赛H dp+map离散

    一开始用搜索直接超时,看题解会的 #include<iostream> #include<cstdio> #include<map> #include<cst ...

  6. hdu 4027 2011上海赛区网络赛G 线段树 成段平方根 ***

    不能直接使用成段增减的那种,因为一段和的平方根不等于平方根的和,直接记录是否为1,是1就不需要更新了 #include<cstdio> #include<iostream> # ...

  7. hdu 4006 优先队列 2011大连赛区网络赛F **

    签到题都要想一会 #include<cstdio> #include<iostream> #include<algorithm> #include<cstri ...

  8. hdu 4035 2011成都赛区网络赛E 概率dp ****

    太吊了,反正我不会 /* HDU 4035 dp求期望的题. 题意: 有n个房间,由n-1条隧道连通起来,实际上就形成了一棵树, 从结点1出发,开始走,在每个结点i都有3种可能: 1.被杀死,回到结点 ...

  9. hdu 4044 2011北京赛区网络赛E 树形dp ****

    专题训练 #include<stdio.h> #include<iostream> #include<string.h> #include<algorithm ...

随机推荐

  1. matplotlib绘制直方图【柱状图】

    代码: def drawBar(): xticks = ['A', 'B', 'C', 'D', 'E']#每个柱的下标说明 gradeGroup = {'A':200,'B':250,'C':330 ...

  2. 基础知识《八》---Java反射机制

    1.反射可以做什么 2.反射相关的API 3.获取Class运行时类的实例的三种方法: 1)通过运行时类本身的.class属性***** Class clazz= Person.class; 2)通过 ...

  3. centos7.0 安装LNMP运行环境

    LNMP作为php流行的运行环境,而最近需要搭建一个内部的php论坛.记录下LNMP的安装: 1.安装mysql 请参考:centos7 安装mysql5.7.11注意事项 2.安装php yum i ...

  4. question2answer论坛框架分析及web开发思考

    2015年7月25日 17:31:42 星期六 一个专门做论坛的开源PHP框架, 有后台, 支持多语种 入口文件是框架根目录的index.php 他包含了/qa-include/qa-index.ph ...

  5. Storm集群的安装配置

    Storm集群的安装分为以下几步: 1.首先保证Zookeeper集群服务的正常运行以及必要组件的正确安装 2.释放压缩包 3.修改storm.yaml添加集群配置信息 4.使用storm脚本启动相应 ...

  6. mysql-5.6.23-winx64.zip版本安装记录

    *操作系统:Win7 64位旗舰版 一.解压至任意目录,此处以“E:\mysql-5.6.23-winx64”为例: 二.设置环境变量:新建变量名 MYSQL_HOME,值为解压的路径 E:\mysq ...

  7. Python初识

    Python第一天   一.为什么学Python        作为一名linux运维工程师现在越来越感觉不好干了.没有地位,还待背黑锅,并且运维自动化发展的这么快,普通运维岗位的路也越来越窄(因为我 ...

  8. codeforces 507B. Amr and Pins 解题报告

    题目链接:http://codeforces.com/problemset/problem/507/B 题目意思:给出圆的半径,以及圆心坐标和最终圆心要到达的坐标位置.问最少步数是多少.移动见下图.( ...

  9. js注册读秒进度条

    转载自://http://blog.csdn.net/wugouzi/article/details/12621385 <head> <meta http-equiv="C ...

  10. 20145213《Java程序设计》第二周学习总结

    20145213<Java程序设计>第二周学习总结 教材学习内容总结 本周娄老师给的任务是学习教材的第三章--基础语法.其实我觉得还蛮轻松的,因为在翻开厚重的书本,一股熟悉的气息扑面而来, ...