dp[a][b][c],表示三个人从小到大依次在a,b。c位置时。距离结束最少的时间。

每次选一个人走到c+1位置搜索就好了。

坑点在于不能floyd。预计题目没说清楚。意思就是假设没送Li,那么Li~n的点连去都不能去。

#include<cstdio>
#include<queue>
#include<algorithm>
#include<cstring>
using namespace std;
#define INF 0x3f3f3f3f
int dp[31][31][31];
int mp[31][31];
int n;
int dfs(int a[])
{
if(~dp[a[0]][a[1]][a[2]]) return dp[a[0]][a[1]][a[2]];
if(a[2]==n) return 0;
int tmp[3];
int mins=INF;
for(int i=0;i<3;i++)
{
tmp[0]=a[0];tmp[1]=a[1];tmp[2]=a[2];
tmp[i]=a[2]+1;
sort(tmp,tmp+3);
mins=min(mins,dfs(tmp)+mp[a[i]][tmp[2]]);
}
return dp[a[0]][a[1]][a[2]]=mins;
}
int main()
{
int cas;
scanf("%d",&cas);
while(cas--)
{
scanf("%d",&n);
memset(dp,-1,sizeof(dp));
for(int i=1;i<=n;i++) mp[i][i]=1;
for(int i=1;i<=n-1;i++)
{
for(int j=i+1;j<=n;j++)
{
scanf("%d",&mp[i][j]);
mp[j][i]=mp[i][j];
}
}
// for(int k=1;k<=n;k++)
// {
// for(int i=1;i<=n;i++)
// {
// for(int j=1;j<=n;j++)
// {
// mp[i][j]=min(mp[i][j],mp[i][k]+mp[k][j]);
// }
// }
// }
int a[3]={1,1,1};
printf("%d\n",dfs(a));
}
return 0;
}

最新文章

  1. Java基本语法练习
  2. 常用的HTTP状态代码
  3. Coursera Machine Learning 作业答案脚本 分享在github上
  4. java.lang.UnsupportedClassVersionError: org/xwiki/xxx : Unsupported major.minor version 51.0
  5. mysql常用命令集锦
  6. Ajax获得站点文件内容实例
  7. 概率图模型之有向图与无向图之间的关系 I map D map perfect map(完美图) 概念
  8. 网站注册信息的JS全码
  9. go pprof
  10. struts2 模型驱动的action赋值优先顺序
  11. Spring mvc系列一之 Spring mvc简单配置
  12. java 如何将 word,excel,ppt如何转pdf--jacob
  13. 关于JQuery的绑定方法
  14. super 关键字
  15. python学习笔记-列表和字典
  16. webpack打包时排除其中一个css、js文件,或单独打包一个css、js文件
  17. idea找不到import project
  18. Spring对Bean装配详解
  19. C语言通过枚举网卡,API接口可查看man 7 netdevice--获取接口IP地址
  20. ADB命令行工具使用

热门文章

  1. this.treeData = JSON.parse(JSON.stringify(this.d)) 树的序列化反序列化
  2. python基础一 day7 复习文件操作
  3. 失误1: 把i放到循环体内部,i++失效
  4. modify django app models.py adn settings.py
  5. svn服务
  6. spring-mvc jackson配置json为空不输出
  7. 「问题思考」python的递归中return返回none
  8. JSTL标签判断list是否为空
  9. python接口自动化-multipart/form-data上传图片
  10. PTA 01-复杂度2 Maximum Subsequence Sum (25分)