tjut 3538
来源:互联网 发布:乐乎lofter4.9.0 编辑:程序博客网 时间:2024/06/06 00:52
#include <stdio.h> #include <string.h> #include <stdlib.h> #include <iostream> #include <algorithm> using namespace std; const int INF=3000000; int d[25][25],dp[2500000][25],f[2500000]; int main(){ //就是旅行商问题变形 int n,m,i,j,u,v,s,ans; //dp[s][i]表示状态是s终点是i while(scanf("%d%d",&n,&m)!=EOF){ for(i=0;i<n;i++) for(j=0;j<n;j++) scanf("%d",&d[i][j]); memset(f,0,sizeof(f)); for(i=0;i<m;i++){ //将每个点之前要走的点进行 scanf("%d%d",&u,&v); //状态压缩 f[v]|=(1<<u); } for(i=0;i<(1<<n);i++) for(j=0;j<n;j++) dp[i][j]=INF; dp[1][0]=0; for(s=0;s<(1<<n);s++){ for(i=0;i<n;i++){ if(dp[s][i]!=INF) for(j=0;j<n;j++){ if((d[i][j]==-1||(!(s&(1<<i)))||(s&(1<<j))||f[j]!=(s&f[j]))) continue; //主要判断j点之前的点是否都走过 dp[s|(1<<j)][j]=min(dp[s|(1<<j)][j],dp[s][i]+d[i][j]); } } } ans=INF; for(i=0;i<n;i++) ans=min(ans,dp[(1<<n)-1][i]); if(ans==INF) puts("-1"); else printf("%d\n",ans); } return 0; }
0 0
- tjut 3538
- tjut 5289
- tjut 5288
- tjut 5294
- tjut 2586
- tjut 5296
- tjut 5297
- tjut 5299
- tjut 5384
- tjut 5387
- tjut 5386
- tjut 5381
- tjut 5400
- tjut 5399
- tjut 5396
- tjut 5398
- tjut 5412
- tjut 5410
- IK Analyzer 类图关系
- MySQL数据的主从复制、半同步复制和主主复制详解
- C#读取XML文件,反序列化为指定对象
- spring mvc拦截器和<mvc:annotation-driven />的详解
- iOS 广告轮播图的实现与封装
- tjut 3538
- VS2010/MFC编程入门之三十四(菜单:VS2010菜单资源详解)
- HTTP状态码
- Binary Tree Level Order Traversal 1+2
- JAVA AES字符串解密算法可读取文件
- 一些总结
- 从无到有开发连麦直播技术点整理-AnyRTC
- java操作数据库(JDBC)
- python函数中 return语句 之后的语句 一定不会执行?