AT_abc100_d题解
考虑怎么去掉绝对值。分别讨论每项的正负,一共有 \(2^3=8\) 种情况。
比如:我们要使 \(\sum\limits_{i=1}^m a_{t_i}+\sum\limits_{i=1}^m b_{t_i}-\sum\limits_{i=1}^m c_{t_i}\) 最大,那么就对每个蛋糕,求出所有蛋糕的 \(a_i+b_i-c_i\) ,降序排序,取前 \(m\) 个即可。
代码:
#include<bits/stdc++.h>
#define int long long
using namespace std;
int n,m;
signed main(){
cin>>n>>m;
vector<int> x(n),y(n),z(n);
for(int i=0;i<n;++i){
cin>>x[i]>>y[i]>>z[i];
}
int ans=0;
vector<int>sums(n);
for(int a=-1;a<=1;a+=2){
for(int b=-1;b<=1;b+=2){
for(int c=-1;c<=1;c+=2){
for(int i=0;i<n;++i){
sums[i]=a*x[i]+b*y[i]+c*z[i];
}
sort(sums.begin(),sums.end(),greater());
int sum=0;
for(int i=0;i<m;++i){
sum+=sums[i];
}
ans=max(ans,sum);
}
}
}
cout<<ans;
}

浙公网安备 33010602011771号