2020杭电第二场1010题-无须映射
插入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; }