插入vector后用vector.size排个序就能省掉映射啦

#include<bits/stdc++.h>
typedef long long ll;
using namespace std;
const int N=55;

struct node{
    int a,b,c,d;
    node(int a,int b,int c,int d):a(a),b(b),c(c),d(d){}
};
ll ans=0;
vector<node> val[N];
bool cmp(vector<node> a,vector<node> b){
    return a.size()>b.size();
}

void dfs(int x,int a,int b,int c,int d){
    if(val[x].size()==0){
        ll tmp = (ll)a*b*c*d;
        ans=max(tmp,ans);
        return ;
    }
    for(int i=0;i<val[x].size();i++)
        dfs(x+1,a+val[x][i].a,b+val[x][i].b,c+val[x][i].c,d+val[x][i].d);
}

int main()
{
    int T;cin>>T;while(T--){
        int n,m;
        cin>>n>>m;
        ans=0;
        for(int i=0;i<N;i++)val[i].clear();
        for(int i=0,k,a,b,c,d;i<n;i++){
            cin>>k>>a>>b>>c>>d;
            node t={a,b,c,d};
            val[k].push_back(t);
        }
        sort(val+1,val+m+1,cmp);
        dfs(1,100,100,100,100);
        cout<<ans<<endl;
    }
    return 0;
}