Problem

这题的题意是 求一条 经过 起点和终点的 最长路径。且一个点只能经过一次。

我们设定 \(dis_{i,j}\) 为 i 到 j 的距离(应该没有重边)

要注意的是 不能用 \(Floyd\) 求最长路 这样会挂掉

因为你这样 就没办法保证 点 \(i\) 只经过一次

显然是状压dp 我们考虑 dp 状态 \(dp_{i,j}\)

\(i\) 表示当前位置 \(j\)表示走过的地方

#include<bits/stdc++.h>
using namespace std ;
#define int long long
#define fi first
#define se second
#define pb push_back
inline int read() {
register int x = 0 , f = 1 ;
register char c = getchar() ;
for( ; ! isdigit(c) ; c = getchar()) if(c == '-') f = -1 ;
for( ; isdigit(c) ; c = getchar()) x = (x << 1) + (x << 3) + (c & 15) ;
return x * f ;
}
template < typename T > inline bool cmax(T & x , T y) {
return x < y ? (x = y) , 1 : 0 ;
}
template < typename T > inline bool cmin(T & x , T y) {
return x > y ? (x = y) , 1 : 0 ;
}
template < typename T > inline bool cabs(T & x) {
return x > 0 ? 1 : (x = - x) , 0 ;
}
inline int QP(int x , int y , int Mod) {
int ans = 1 ;
for( ; y ; y >>= 1 , x = (x * x) % Mod)
if(y & 1) ans = (ans * x) % Mod ;
return ans ;
}
int n , m ;
const int N = 19 ;
int dis[N][N] ;
int dp[N][1 << N] ;
signed main() {
memset(dis , 0xcf , sizeof(dis)) ;
memset(dp , 0xcf , sizeof(dp)) ;
n = read() , m = read() ;
for(register int i = 1 ; i <= m ; i ++) {
int u = read() , v = read() , w = read() ;
dis[++ u][++ v] = w ;
}
for(register int i = 2 ; i <= n ; i ++) dp[i][1 + (1 << i - 1)] = dis[1][i] ;
int s = (1 << n) - 1 ;
for(register int i = 2 ; i <= s ; i ++) {
for(register int j = 1 ; j <= n ; j ++) {
if((i & (1 << j - 1)))
for(register int k = 1 ; k <= n ; k ++) {
if(j ^ k && (! (i & (1 << k - 1)))) {
cmax(dp[k][i | (1 << k - 1)] , dp[j][i] + dis[j][k]) ;
}
}
}
}
int ans = 0 ;
for(register int i = (1 << n - 1) + 1 ; i <= s ; i ++)
cmax(ans , dp[n][i]) ;
printf("%lld\n" , ans) ;
return 0 ;
}

最新文章

  1. Android的Kotlin秘方(I):OnGlobalLayoutListener
  2. find命令
  3. ZK 使用jfreeChart
  4. Anti-If: The missing patterns--转
  5. 判断apache是否启动的脚本
  6. enumerate
  7. Guess
  8. codility上的问题 (21) Upsilon 2012
  9. [LeetCode]题解(python):027-Remove Element
  10. DotNet加密方式解析--数字签名
  11. Oracle Test 日志
  12. Linux指令--kill
  13. pat1081-1090
  14. BeautifulSoup详解
  15. python学习第40天
  16. Java 基础【19】代理
  17. POI (Apache POI)
  18. Git:创建与合并分支
  19. PHP+Hadoop+Hive+Thrift+Mysql实现数据统计分析
  20. 关于JQuery animate()方法

热门文章

  1. Spring Boot 2.x基础教程:使用Spring Data JPA访问MySQL
  2. SLF4j 居然不是编译时绑定?日志又该如何正确的分文件输出?——原理与总结篇
  3. vs 搭配 Linux 开发
  4. 极简估值教程——第一篇 速判估值与PEG的推导
  5. 对特殊方法的访问 - Special method lookup
  6. pip安装了包但pycharm里找不到
  7. Javase-坦克大战小游戏,为什么会出现上方向和左方向的子弹不能发射的情况?检查了好久,有大佬帮帮忙吗,小白睡不着
  8. jQuery-Moblie在Chrome下出现的问题
  9. width、height为auto或者100%的区别
  10. C# DateTime 工具类