CDOJ 1279 班委选举 每周一题 div2 暴力

班委选举

题目连接:

http://acm.uestc.edu.cn/#/status/list?problemId=1279

Description

高考的脚步越来越近了……时间如山涧小溪一般悄无声息地流走,一去不复还……曾几何时嬉笑的最后一排,如今也已经被大大小小的书本填完,我们从未有过为一件事如此认真过,但我们坚信我们的付出是值得的。

班长曲琪打破了班级久久的寂静。她咳了咳嗽,缓缓地走上讲台,学习委员乔伊也起身走向讲台。

“我们将进行我们最后一次班委选举,对吧副班长”。曲琪虽然尽力使用高兴的语气,但是难掩心中的将要与他离别和与他不确定的未来的惆怅。 title

“我是学委”。乔伊再一次提醒曲琪,然而曲琪总是喜欢叫他副班长。乔伊紧接着说:“作为我们最后一次的班委选举,我和曲琪想了很多选择方式,我们接下来要展示的是我们的选拔标准”。

曲琪将手里的方案书打开,无意间一个小小盒子从手里掉了出来,曲琪马上把盒子捡了起来-那可是给他的生日礼物-一盒小小的曲奇饼。

“每……每位学生只能担任一个职务,不可以……不可以担任多个职务”,曲琪的心里小鹿乱撞生怕被他看到了礼物,涨红着脸读着方案书。

“我们将选出6位课代表,根据梅老师的带班经验一个班级的学习能力等于各科课代表的对应学科的学科能力总和”。 title

梅老师说:“同学们,我通过各科老师给你们的各科学习能力评了分用一个0-100以内的整数表示,作为你们的班主任我想通过这次的班委选举,全力提高我们的班级学习能力。” title

罗小涵:“求最大的班级学习能力这种事情还是很容易直接算出的吧,对吧”。

你:“怎么可能啊,N个人快N^6种安排方式,你看木馨算了好久了,都没有算出来,呀,她怎么睡着了”。

罗小涵:“……迟钝”。

Input

输入一个整数N(6<=N<=1000)表示你班级的人数。

接下去N行,第i行有6个整数pi(0<=pi<=100)表示第i个人的语文,数学,英语,化学,物理,生物能力。

Output

输出一个数表示这个班级的最大的班级学习能力(各科课代表的对应学科的学科能力总和)。

Sample Input

6
41 85 72 38 80 69
65 68 96 22 49 67
51 61 63 87 66 24
80 83 71 60 64 52
90 60 49 31 23 99
94 11 25 24 51 15

Sample Output

539

Hint

题意

题解:

暴力枚举

每一维中我只需要选出6个最大的向量出来就好了,然后再暴力枚举每一维究竟选择哪一个向量就好了。”

道理很简单,每一维除了那6个向量之外,其他的向量都是没有任何用的。

代码

#include<bits/stdc++.h>
using namespace std;
int vis[1020];
int ans = 0;
vector<pair<int,int> > p[6];
struct node
{
    int x[6];
    int id;
};
bool cmp1(node a,node b)
{
    return a.x[0]>b.x[0];
}
bool cmp2(node a,node b)
{
    return a.x[1]>b.x[1];
}
bool cmp3(node a,node b)
{
    return a.x[2]>b.x[2];
}
bool cmp4(node a,node b)
{
    return a.x[3]>b.x[3];
}
bool cmp5(node a,node b)
{
    return a.x[4]>b.x[4];
}
bool cmp6(node a,node b)
{
    return a.x[5]>b.x[5];
}
vector<node>v;
void dfs(int x,int A)
{
    if(x==6)
    {
        ans=max(ans,A);
        return;
    }
    for(int i=0;i<p[x].size();i++)
    {
        if(vis[p[x][i].second])
            continue;
        vis[p[x][i].second]=1;
        dfs(x+1,A+p[x][i].first);
        vis[p[x][i].second]=0;
    }
}
int main()
{
    int n;
    scanf("%d",&n);
    for(int i=1;i<=n;i++)
    {
        node tmp;
        for(int j=0;j<6;j++)
            scanf("%d",&tmp.x[j]);
        tmp.id=i;
        v.push_back(tmp);
    }
    sort(v.begin(),v.end(),cmp1);
    for(int i=0;i<6;i++)
        p[0].push_back(make_pair(v[i].x[0],v[i].id));
    sort(v.begin(),v.end(),cmp2);
    for(int i=0;i<6;i++)
        p[1].push_back(make_pair(v[i].x[1],v[i].id));
    sort(v.begin(),v.end(),cmp3);
    for(int i=0;i<6;i++)
        p[2].push_back(make_pair(v[i].x[2],v[i].id));
    sort(v.begin(),v.end(),cmp4);
    for(int i=0;i<6;i++)
        p[3].push_back(make_pair(v[i].x[3],v[i].id));
    sort(v.begin(),v.end(),cmp5);
    for(int i=0;i<6;i++)
        p[4].push_back(make_pair(v[i].x[4],v[i].id));
    sort(v.begin(),v.end(),cmp6);
    for(int i=0;i<6;i++)
        p[5].push_back(make_pair(v[i].x[5],v[i].id));
    dfs(0,0);
    cout<<ans<<endl;
}
    原文作者:qscqesze
    原文地址: https://www.cnblogs.com/qscqesze/p/5241832.html
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞