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;
}
posted @ 2024-10-19 08:53  cly312  阅读(10)  评论(0)    收藏  举报