hdu3001 Travelling
Travelling
Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 2520 Accepted Submission(s): 735
1 2 100
3 2
1 2 40
2 3 50
3 3
1 2 3
1 3 4
2 3 10
90
7
#include <iostream>
#include <stdio.h>
using namespace std;
int threenum[11]={1,3,9,27,81,243,729,2187,6561,19683,59049};
#define inf 0x4f4f4f4f
int dp[600000][15],n,m;
int threeevery[600000][15],dis[15][15];
int fmin(int x,int y){if(x<y)return x;return y;}
void makethree()//先预处理,算出所有的值
{
int i,temp,j;
for(i=0;i<threenum[10];i++)//3的11次
{
temp=i;
for(j=0;j<10;j++)
{
threeevery[i][j]=temp%3;
temp=temp/3;
}
} }
void init()
{
int i,j,s,e,val;
for(i=0;i<threenum[n];i++)
{
for(j=0;j<n;j++)
{
dp[i][j]=inf;
}
}
for(i=0;i<n;i++)
for(j=0;j<n;j++)
{
dis[i][j]=inf;
}
for(i=0;i<n;i++)
{
dp[threenum[i]][i]=0;//到自已的点初始化为0
} for(i=0;i<m;i++)
{ scanf("%d%d%d",&s,&e,&val);
s--;e--;//全部从0开
if(val<dis[s][e])
dis[s][e]=dis[e][s]=val;//排除重边取最小值 } }
int makedp()
{
int i,j,k,minx;
bool flag;
minx=inf;
for(i=0;i<threenum[n];i++)//对于每一位都要计算
{
flag=true;//标记是否每一个点都已经经过
for(j=0;j<n;j++)
{
if(threeevery[i][j]==0)//是这个点没有走
flag=false;
if(dp[i][j]==inf)//没有走过
{
continue;
}
for(k=0;k<n;k++)//加入k这个点
{
if((j==k)||threeevery[i][k]>=2||(dis[j][k]==inf))//自已到自已的地方,经过超过两次,不相连通去掉
continue;
dp[i+threenum[k]][k]=fmin(dp[i+threenum[k]][k],dp[i][j]+dis[j][k]);//从j到k
} }
if(flag)//满足条件,对最小值进行更新
{
for(j=0;j<n;j++)
{
minx=fmin(dp[i][j],minx);
}
}
}
if(minx==inf)
{
minx=-1;
} printf("%d\n",minx);
return 1;
}
int main()
{
makethree();
while(scanf("%d%d",&n,&m)!=EOF)
{
init();
makedp();
}
return 0;
}
hdu3001 Travelling的更多相关文章
- hdu3001Travelling
参考了别人的代码 https://blog.csdn.net/u010372095/article/details/38474721 深感自己的弱小 这是tsp问题,和基本的tsp问题没什么大的区 ...
随机推荐
- php通过curl调用jpush接口实现消息的推送
public function actionNotifyto() { //$regid = $_REQUEST['regid']; $url = 'https://api.jpush.cn/v3/pu ...
- JazzyViewPager开源项目的简析及使用
JazzyViewPager是一个重写的ViewPager,能是ViewPager滑动起来更加的炫酷. 开源地址:https://github.com/jfeinstein10/JazzyViewPa ...
- 【DFS/BFS】NYOJ-58-最少步数(迷宫最短路径问题)
[题目链接:NYOJ-58] 经典的搜索问题,想必这题用广搜的会比较多,所以我首先使的也是广搜,但其实深搜同样也是可以的. 不考虑剪枝的话,两种方法实践消耗相同,但是深搜相比广搜内存低一点. 我想,因 ...
- 【转】http-equiv的含义
http-equiv顾名思义,相当于http的文件头作用,它可以向浏览器传回一些有用的信息,以帮助正确和精确地显示网页内容,与之对应的属性值为content,content中的内容其实就是各个参数的变 ...
- IOS 五星评分控件
程序中需要打分的功能,在网上找了几个,都不是很满意.下面是实现出的效果.可以点击,可以拖动. 使用方法:初始化控件. TQStarRatingView *starRatingView = [[TQSt ...
- 仿网易新闻客户端头条ViewPager嵌套实例
要点: 1.重写组件public boolean onInterceptTouchEvent(MotionEvent event)方法 2.正确使用requestDisallowInterceptTo ...
- spring中的BeanFactory与ApplicationContext的作用和区别?
BeanFactory类关系继承图 1. BeanFactory类结构体系: BeanFactory接口及其子类定义了Spring IoC容器体系结构,由于BeanFactory体系非常的庞大和复杂, ...
- Entity Framework 5.0
今天 VS2012 .net Framework 4.5 Entity Framework 5.0 三者共同发布了. ( EF5 Released ) 在介绍新特性之前,先与大家回顾一下EF版 ...
- acdream 1056 (黑白染色)
题意:给你一些关系,每个关系是两只马的名字,表示这两个马不能在一个分组里,问你能否将这些马分成两组. 黑白染色,相邻的点染不同颜色.bfs搞即可,水题. /* * this code is made ...
- ubuntu安装nginx+php
1.安装nginx aptitude search nginx sudo apt-get install nginx 2.安装php sudo apt-get install php5 sudo ap ...