LQ0089 组队矩阵计算

Posted 海岛Blog

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LQ0089 组队矩阵计算相关的知识,希望对你有一定的参考价值。

题目来源:蓝桥杯2019初赛 C++ B组D题

题目描述
作为篮球队教练,你需要从以下名单中选出1 号位至5 号位各一名球员,组成球队的首发阵容。
每位球员担任1号位至5号位时的评分如下表所示。请你计算首发阵容1号位至5号位的评分之和最大可能是多少?

该表格可以参考team.txt

问题分析
求最大值问题。
先算出每个球员的最佳位置,再算组队最大值。
这个题的关键在于怎么用数据结构来存储算出来值,为进一步计算所用。
这个程序对于特殊的数据,也许会出错?

AC的C语言程序如下:

/* LQ0089 组队 */

#include <stdio.h>
#include <string.h>

#define N 20
#define M 5

int a[][M] = 
    97, 90, 0, 0, 0,
    92, 85, 96, 0, 0,
    0, 0, 0, 0, 93,
    0, 0, 0, 80, 86,
    89, 83, 97, 0, 0,
    82, 86, 0, 0, 0,
    0, 0, 0, 87, 90,
    0, 97, 96, 0, 0,
    0, 0, 89, 0, 0,
    95, 99, 0, 0, 0,
    0, 0, 96, 97, 0,
    0, 0, 0, 93, 98,
    94, 91, 0, 0, 0,
    0, 83, 87, 0, 0,
    0, 0, 98, 97, 98,
    0, 0, 0, 93, 86,
    98, 83, 99, 98, 81,
    93, 87, 92, 96, 98,
    0, 0, 0, 89, 92,
    0, 99, 96, 95, 81
;

int p[N][2], maxp[M];

int main()

    /* 找出每个人的最佳位置 */
    for (int i = 0; i < N; i++) 
        int maxa = 0;
        for (int j = 0; j < M; j++)
            if (a[i][j] > maxa)
                maxa = a[i][j], p[i][0] = maxa, p[i][1] = j;
    

    memset(maxp, 0, sizeof maxp);
    for (int i = 0; i < N; i++)
        if (p[i][0] > maxp[p[i][1]])
            maxp[p[i][1]] = p[i][0];

    int sum = 0;
    for (int i = 0; i < M; i++)
        sum += maxp[i];

    printf("%d\\n", sum);

    return 0;

以上是关于LQ0089 组队矩阵计算的主要内容,如果未能解决你的问题,请参考以下文章

bzoj 1071: [SCOI2007]组队

bzoj1071 [SCOI2007]组队

第十届蓝桥杯省赛B组 做题记录(python)

第十届蓝桥杯省赛B组 做题记录(python)

第十届蓝桥杯省赛B组 做题记录(python)

第十届蓝桥杯B组Java试题答案(省赛)