题目

用动态规划很容易将完成任务量作为dp的阶段,通过指派服务员,从当前i-1个任务转移到i个任务;

我们可以用一个四维数组f[i][x][y][z]来表示在完成当前任务i时,三个机器人分别在x,y,z的位置;每次由其中一个机器人向目标位置转移;取min值;

但是算法规模一点都不乐观;

我们想到在完成当前任务i时,必定存在一个机器人位于p[i],即目标地;那么我们可以用f[i][x][y],即完成任务i时,另外两个机器人位于x,y的位置;

状态转移:

f[k][i][j]=min(f[k][i][j],f[k-1][i][j]+c[p[k-1]][p[k]]);//k为当前完成任务,c数组记录两者间的距离,p数组为目标到达地;
f[k][p[k-1]][j]=min(f[k][p[k-1]][j],f[k-1][i][j]+c[i][p[k]]);
f[k][i][p[k-1]]=min(f[k][i][p[k-1]],f[k-1][i][j]+c[j][p[k]]);

不妨设p0=3,那么初始值f[0][1][2]=0;目标为f[N][?][?];

题后反思:

求解线性dp要注意阶段的选择,注意附加信息要处理;

确定状态时要注意选择最小的能表示整个状态的维度空间;

阶段保证无后效性;

#include<bits/stdc++.h>
#define maxl 201
#define maxn 1001
using namespace std;
int f[][][],n,m,t,l,c[][],p[],ans;
template<typename T>inline void read(T &x)
{
x=;T f=,ch=getchar();
while(!isdigit(ch)) ch=getchar();
if(ch=='-') f=-, ch=getchar();
while(isdigit(ch)) x=(x<<)+(x<<)+(ch^), ch=getchar();
x*=f;
}
int main()
{
read(t);
while(t--) {
int ans=;
read(l);read(n);
for(int i=;i<=l;i++)
for(int j=;j<=l;j++)
read(c[i][j]);
memset(f,0x7f,sizeof(f));
for(int i=;i<=n;i++) {
read(p[i]);
}
f[][][]=c[][p[]];
f[][][]=c[][p[]];
f[][][]=c[][p[]];
p[]=,f[][][]=;
for(int k=;k<=n;k++)
for(int i=;i<=l;i++)
for(int j=;j<=l;j++)
if(i!=j&&p[k-]!=j&&p[k-]!=i)
{
f[k][i][j]=min(f[k][i][j],f[k-][i][j]+c[p[k-]][p[k]]);
f[k][p[k-]][j]=min(f[k][p[k-]][j],f[k-][i][j]+c[i][p[k]]);
f[k][i][p[k-]]=min(f[k][i][p[k-]],f[k-][i][j]+c[j][p[k]]);
}
for(int i=;i<=l;i++)
for(int j=;j<=l;j++) {
if(i!=j&&i!=p[n]&&j!=p[n])
ans=min(ans,f[n][i][j]);
}
printf("%d\n",ans);
}
return ;
}

最新文章

  1. [导读]Learning from Imbalanced Classes
  2. 初识Linux—1
  3. 安全攻防之SQL注入(通过sqlmap搞定所有问题)
  4. freemarker 分页取值
  5. codevs1080线段树练习
  6. mysql5.6优化建议
  7. 分享: 利用Readability解决网页正文提取问题
  8. 0119——UITextField
  9. php缓存生成及更新实现参考哦
  10. DotNetCore跨平台~一起聊聊Microsoft.Extensions.DependencyInjection
  11. Golang 网络爬虫框架gocolly/colly 五 获取动态数据
  12. 【C#】数据库脚本生成工具(二)
  13. selenium+python自动化测试系列---基础知识篇(1、HTML基础知识1)
  14. element 关闭弹窗时清空表单信息
  15. Cocos2dx开发之运行与渲染流程分析
  16. ES5, ES6, ES2016, ES.Next: What&#39;s going on with JavaScript versioning?
  17. DDD领域模型数据访问权限之用户权限(十)
  18. java 基础之--类加载器的过程
  19. 记录.NET Core部署到Linux之发布项目到Linux(2)
  20. [BZOJ4069][Apio2015]巴厘岛的雕塑

热门文章

  1. iostat查看io情况
  2. linux软件安装方式
  3. SpringBoot 2.x.x会拦截静态资源问题
  4. springcloud第二步:发布服务提供者
  5. 使用springmvc进行文件的上传和下载
  6. 001-JUnit之断言assert
  7. 【Docker】-NO.132.Docker.1 -【Docker 修改容器端口】
  8. 关于cc.easesinexxx 与 cc.easeexponentiallxxx 的几种效果简单描述
  9. Xamarin.Forms FlexLayout 布局扩展+ 模板扩展+弹性换行
  10. FB面经 Prepare: Even Tree