每日一题 Leetcode 1947

基于官方答案

解题思路
先将每个学生-老师组合的兼容性评分求出,然后利用C++ next_permutation()函数进行全排列,寻找全排列中最大兼容性评分和最高的进行返回

(中间注释部分请忽略)

class Solution {
public:
    int maxCompatibilitySum(vector<vector<int>>& students, vector<vector<int>>& mentors) {
    //学生/老师数量
    int m=students.size();
    //问卷题目数
    int n=students[0].size();
    //存放每个学生-老师的兼容性评分
    vector<vector<int>> s(m,vector<int>(m));
    //存放返回值
    int Max=0;

    for(int i=0;i<m;i++)
    {
        for(int j=0;j<m;j++)
        {
            int t=0;
            int temp=0;
            while(t<n)
            {
                //当答案相同时,分数+1
                if(students[i][t]==mentors[j][t])
                    temp++;
                t++;
            }
            //cout<<temp<<'\t';//测试语句
            //存入数组
            s[i][j]=temp;
        }
    }

    // for(int i=0;i<m;i++)
    // {
    //     for(int j=m;j<2*m;j++)
    //     {
    //         if(i%m != j%m)
    //         {
    //             //cout<<i<<j<<'\t';
    //             int flag=s[i]+s[j]+s[2*m+3-i-j%m];
    //             //cout<<flag<<'\t';
    //             num.push_back(flag);
    //         }
    //     }
    // }

    //可能可以用双重循环代替?
    vector<int> p(m);
    iota(p.begin(), p.end(), 0);
    
    do
    {
        int flag=0;
        for(int i=0;i<m;i++)
            flag+=s[i][p[i]];//每种排列的兼容性评分和
        //cout<<flag<<'\t';
        Max=max(Max,flag); //求出最大值
    }while(next_permutation(p.begin(),p.end()));//若还有不同排列,继续循环
 
    return Max;

    }
};

作者:kutu1bw-i
链接:https://leetcode.cn/problems/maximum-compatibility-score-sum/solution/ji-yu-guan-fang-da-an-by-kutu1bw-i-cykn/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值