• TYVJ1061 Mobile Service


    P1061 Mobile Service
    时间: 1000ms / 空间: 131072KiB / Java类名: Main
    描述
    一个公司有三个移动服务员。如果某个地方有一个请求,某个员工必须赶到那个地方去(那个地方没有其他员工),某一时刻只有一个员工能移动。被请求后,他才能移动,不允许在同样的位置出现两个员工。从p到q移动一个员工,需要花费c(p,q)。这个函数没有必要对称,但是c(p,p)=0。公司必须满足所有的请求。目标是最小化公司花费。
    输入格式
    第一行有两个整数L,N(3<=L<=200, 1<=N<=1000)。L是位置数;N是请求数。每个位置从1到L编号。下L行每行包含L个非负整数。第i+1行的第j个数表示c(i,j) ,并且它小于2000。最后一行包含N个数,是请求列表。一开始三个服务员分别在位置1,2,3。
    输出格式
    一个数M,表示最小服务花费。
    测试样例1
    输入

    5 9
    0 1 1 1 1
    1 0 2 3 2
    1 1 0 4 1
    2 1 5 0 1
    4 2 3 4 0
    4 2 4 1 5 4 3 2 1
    输出

    5

    dp[i][j][k]表示第i个请求,三个服务员分别处在j,k,p[i]位置的最小值。但发现如果开1000*200*200会MLE,所以将第一维开成滚动数组。

    #include<iostream>
    #include<cstdio>
    #include<cstring>
    using namespace std;
    const int maxn = 201;
    const int inf = 0x3f3f3f3f;
    int c[maxn][maxn],l,n,dp[2][maxn][maxn],pos[1001],ans=0x7f7f7f7f,r;
    int main() {
        scanf("%d%d",&l,&n);
        for(register int i=1; i<=l; i++)
            for(register int j=1; j<=l; j++)
                scanf("%d",&c[i][j]);
        for(register int i=1; i<=n; i++)
            scanf("%d",&pos[i]);
        memset(dp,0x3f,sizeof(dp));
        dp[0][1][2]=0;
        dp[0][2][1]=0;
        pos[0]=3;
        for(register int i=0; i<n; i++) {
            r^=1;
            for(register int j=1; j<=l; j++)
                for(register int k=1; k<=l; k++)
                    dp[r][j][k]=inf;
            for(register int j=1; j<=l; j++)    
                for(register int k=1; k<=l; k++) {
                    dp[r][j][k]=min(dp[r][j][k],dp[r^1][j][k]+c[pos[i]][pos[i+1]]);
                    dp[r][j][pos[i]]=min(dp[r][j][pos[i]],dp[r^1][j][k]+c[k][pos[i+1]]);
                    dp[r][pos[i]][k]=min(dp[r][pos[i]][k],dp[r^1][j][k]+c[j][pos[i+1]]);
                }
        }
        for(register int i=1; i<=l; i++)
            for(register int j=1; j<=l; j++) {
                ans=min(dp[r][i][j],ans);
            }
        printf("%d",ans);
    }
  • 相关阅读:
    Linux学习笔记(八)权限管理命令
    Linux学习笔记(七)关机、重启及常用的网络命令
    Linux学习笔记(六)压缩和解压缩命令
    Linux学习笔记(五)搜索命令
    Linux学习笔记(四)帮助命令
    Linux学习笔记(三)目录和文件都能操作的命令
    Linux学习笔记(二)文件操作命令
    Linux学习笔记(一)目录处理命令
    面试题((A)null).fun()——java中null值的强转
    idea注册码
  • 原文地址:https://www.cnblogs.com/sdfzsyq/p/9677150.html
Copyright © 2020-2023  润新知