• 2363: 完美旗手队列


    2363: 完美旗手队列

    Time Limit: 1 Sec  Memory Limit: 64 MB
    Submit: 145  Solved: 7
    [Submit][Status][Web Board]

    Description

    YT大学定于5月16日举行校运动会。学校有 n 个系。组委会要求每个系有 m 个运动员参加开幕式,并且每个系的 m 个运动员站成一队。我们假设 n*m 名运动员站成一个n行m列的队列,表示为Anm:下图中的每一行代表一个系。

     

    a11 a12 a13 a1m

    a21 a22 a23 a2m

         

    an1 an2 an3 anm

     

    现组委会要求每系在 m 个运动员中选出一名旗手站在本系的前面,为了视觉上的美观,要求相邻的旗手身高差距尽可能的小,形成一个完美旗手队列。比如我们从上述队列中选择出{a12, a24, a33, , ank}作为旗手队列。则这n个人的身高差最小的队列是完美旗手队列。比如有4个系,各系选择的旗手分别为a,b, c, d, 则 val=|a-b|+|b-c|+|c-d| 最小的选择为完美旗手队列。你能帮YT大学选择完美旗手队列吗?

    Input

    多个测试样例,每个测试样例第一行为两个整数n, m (1 <= n, m <= 1000) ,接着是n行整数数列,表示原始的队列,整数值表示运动员的身高(<=10000)。

    Output

    对于每一个测试样例,输出最小的val值。

    Sample Input

    3 3
    2 3 1
    4 7 6
    7 9 2
    

    Sample Output

    3
    

    HINT

    旗手的身高是3, 4和2。

    #include<stdio.h>
    #include<string.h>
    #include<stdlib.h>
    #include<math.h>
    #include<algorithm>
    using namespace std;
    #define MIN(aa,bb) aa<bb? aa:bb
    #define inf 1<<30
    int n,m,cap[1010][1010];
    int Min[1010][1010];
    int main()
    {
        int i,j;
        while(scanf("%d%d",&n,&m)!=EOF)
        {
            for(i=0;i<n;i++)
            {
                for(j=0;j<m;j++)
                    scanf("%d",&cap[i][j]);
                sort(cap[i],cap[i]+m);
            }
            memset(Min,0,sizeof(Min));
            for(i=1;i<n;i++)
            {
                for(j=0;j<m;j++)
                {
                    Min[i][j]=inf;
                    int temp=lower_bound(cap[i-1],cap[i-1]+m,cap[i][j])-cap[i-1];
                    if(temp<m)
                        Min[i][j]=MIN(Min[i][j],Min[i-1][temp]+abs(cap[i-1][temp]-cap[i][j]));
                    if(temp>0)
                        Min[i][j]=MIN(Min[i][j],Min[i-1][temp-1]+abs(cap[i-1][temp-1]-cap[i][j]));
                }
            }
            int ans=inf;
            for(i=0;i<m;i++)
                ans=MIN(ans,Min[n-1][i]);
            printf("%d
    ",ans);
        }
        return 0;
    }
    

      

  • 相关阅读:
    Linux进程管理概述
    【反转单链表】一篇就够了
    线性数据结构
    Linux的su和sudo有什么区别?如何使用?
    关于CentOS切换中文输入法的问题
    MySQL 初识
    MySQL 增-删-改操作
    数据库简介
    MySQL 查询操作
    HANDLER Statement
  • 原文地址:https://www.cnblogs.com/mjn1/p/9177118.html
Copyright © 2020-2023  润新知