zoukankan      html  css  js  c++  java
  • 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);
    }
  • 相关阅读:
    OleDbCommand 的用法
    递归求阶乘
    C#重写窗体的方法
    HDU 5229 ZCC loves strings 博弈
    HDU 5228 ZCC loves straight flush 暴力
    POJ 1330 Nearest Common Ancestors LCA
    HDU 5234 Happy birthday 01背包
    HDU 5233 Gunner II 离散化
    fast-IO
    HDU 5265 pog loves szh II 二分
  • 原文地址:https://www.cnblogs.com/sdfzsyq/p/9677149.html
Copyright © 2011-2022 走看看