Floyd + 状态DP

Watashi的板子

#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm> using namespace std; const int INF = (int) 1e8; int dp[<<][]; //dp[S][v] 表示还需访问的集合为S, 现在在v点
int d[][];
int n; void floyd() {
for (int k = ; k <= n; k++) {
for (int i = ; i <= n; i++)
for (int j = ; j <= n; j++)
d[i][j] = min(d[i][j], d[i][k]+d[k][j]);
}
} void print() {
for (int i = ; i <= n; i++) {
for (int j = ; j <= n; j++)
printf("%d ", d[i][j]);
puts("");
}
} int main() {
#ifdef Phantom01
freopen("PKU3311.txt", "r", stdin);
#endif // Phantom01 while (scanf("%d", &n)!=EOF) {
if (==n) break;
for (int i = ; i <= n; i++)
for (int j = ; j <= n; j++)
scanf("%d", &d[i][j]);
// print();
floyd();
// print(); for (int i = ; i <= n; i++)
for (int S = ; S < (<<(n+)); S++)
dp[S][i] = INF; dp[(<<(n+))-][] = ;
for (int S = (<<(n+))-; S >= ; S--) {
for (int v = ; v <= n; v++) {
for (int u = ; u <= n; u++) {
if (!(S&(<<u))) {
if (dp[S][v] < ) {
dp[S][v] = dp[S|(<<u)][u] + d[v][u];
} else {
dp[S][v] = min(dp[S][v], dp[S|(<<u)][u] + d[v][u]);
}
}
}
}
}
printf("%d\n", dp[][]);
} return ;
}

最新文章

  1. 写自己的ASP.NET MVC框架(上)
  2. CentOS找回root密码
  3. 笔记-人老了-github
  4. 手写particles
  5. 1079. Total Sales of Supply Chain (25) -记录层的BFS改进
  6. .net core微服务之基于Docker+Consul+Registrator服务注册服务发现
  7. Linux进程管理的学习
  8. java中的i++与++i的区别以及除法、模的用法(基础)
  9. java 得到目录路径的方法
  10. AI-DRF权限、频率
  11. redis linux(centos) 安装
  12. 【黑客免杀攻防】读书笔记2 - 免杀与特征码、其他免杀技术、PE进阶介绍
  13. string+和stringbuffer的速度比较
  14. jQuery学习笔记:基础
  15. 【代码审计】iCMS_v7.0.7 keywords.admincp.php页面存在SQL注入漏洞分析
  16. python入门-测试代码
  17. java Date 当天时间戳处理
  18. [POI2018]Pow&#243;dź
  19. mycli---数据库工具(提示、自动补全)
  20. Android开发利用Volley框架下载和缓存网络图片

热门文章

  1. ES6 | 关于class类 继承总结
  2. 启动tomcat运行maven工程报错:Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:2.3.2:
  3. git远程仓库变更
  4. [arc082e]ConvexScore
  5. vue-cli解析
  6. String spilt时转义特殊字符【转】
  7. JAVA SSL
  8. 50个经典Sql语句
  9. hadoop-01-ssh无密登录配置
  10. 【Android】把外部文件拷贝的AVD安卓模拟器上的sdcard上,而且在AVD中浏览sdcard的文件