题意:tsp问题,经过图中所有的点并回到原点的最短距离。

解题关键:floyd+状态压缩dp,注意floyd时k必须在最外层

转移方程:$dp[S][i] = \min (dp[S \wedge (1 <  < (i - 1))][k] + dis[k][j],dp[S][i])$

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cstdlib>
#include<cmath>
#define inf 100000000
using namespace std;
int dis[][];
int dp[<<][];
int n,ans;
int main(){
while(scanf("%d",&n)&&n){
for(int i=;i<=n;i++)for(int j=;j<=n;j++)scanf("%d",&dis[i][j]);
for(int k=;k<=n;k++)
for(int i=;i<=n;i++)
for(int j=;j<=n;j++)
dis[i][j]=min(dis[i][k]+dis[k][j],dis[i][j]);
for(int S=;S<=(<<n)-;S++)
for(int i=;i<=n;i++){
if(S&(<<(i-)))//状态S中已经过城市i
{
if(S==(<<(i-))) dp[S][i]=dis[][i];
else{
dp[S][i]=inf;
for(int j=;j<=n;j++){
if(S&(<<(j-))&&i!=j)//枚举不是城市I的其他城市
dp[S][i]=min(dp[S^(<<(i-))][j]+dis[j][i],dp[S][i]);
}
}
}
}
int ans=inf;
for(int i=;i<=n;i++){
ans=min(ans,dp[(<<n)-][i]+dis[i][]);
}
printf("%d\n",ans);
}
return ;
}

改进了一下:

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cstdlib>
#include<cmath>
#define inf 100000000
using namespace std;
int dis[][];
int dp[<<][];
int n,ans;
int main(){
while(scanf("%d",&n)&&n){
for(int i=;i<=n;i++)for(int j=;j<=n;j++)scanf("%d",&dis[i][j]);
for(int k=;k<=n;k++)
for(int i=;i<=n;i++)
for(int j=;j<=n;j++)
dis[i][j]=min(dis[i][k]+dis[k][j],dis[i][j]);
for(int S=;S<=(<<(n+))-;S++)
for(int i=;i<=n;i++)
if(S&(<<i))//状态S中已经过城市i
{
if(S==(<<i)) dp[S][i]=dis[][i];
else{
dp[S][i]=inf;
for(int j=;j<=n;j++){
if(S&(<<j)&&i!=j)//枚举不是城市I的其他城市
dp[S][i]=min(dp[S^(<<i)][j]+dis[j][i],dp[S][i]);
}
}
}
printf("%d\n",dp[(<<(n+))-][]);
}
return ;
}

最新文章

  1. 深入浅出node(1) Node简介
  2. 概率DP
  3. ArcGIS图层介绍
  4. 在项目里交叉使用Swift和OC【转】
  5. MyBatis——Mybatis缓存
  6. 字符集转换: Ansi - Unicode
  7. SQL Server Cpu 100% 的常见原因及优化
  8. 九度OJ 1371 最小的K个数 -- 堆排序
  9. (原)ubuntu16重装显卡驱动后,torch中的问题
  10. 介绍一款管理软件Redmine
  11. jQuery json数据处理
  12. &#39;customerService&#39; for bean class [com.cd.service.business.customer.impl.CustomerService]
  13. Swing-setBounds()用法-入门
  14. Android-Tab
  15. android 应用模式之mvp
  16. Dalvik 虚拟机操作码
  17. jpython basic
  18. Alpha(8/10)
  19. SkylineGlobe 如何实现绘制圆形Polygon和对图层的圆形范围选择查询
  20. HTML5 Canvas 小例子 简易画板

热门文章

  1. || and &amp;&amp; 理解
  2. rails 命名
  3. Oracle数据库体系结构(7) 表空间管理1
  4. 【leetcode刷题笔记】Rotate List
  5. Centos7 配置yum源 安装epel
  6. linux安全相关
  7. ios UIImageWriteToSavedPhotosAlbum报错 NSPhotoLibraryAddUsageDescription
  8. c# 继承小结
  9. 通用jquery页面验证
  10. idea集成spring+spring MVC+mybatis问题