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;
}
查看5道真题和解析