题意:有n个蛋糕,你只买m个,要使买蛋糕的价值最大。
每个蛋糕不同,每个蛋糕的价值有三个指标 ,分别为x,y,z。
价值的计算方式:|a1的x+……+am的x|+|a1的y+……+am的y|+|a1的z+……+am的z|;
思路:
暴力枚举全部情况利用最小项,即:(0为加,1为减)
000,001,011,010,100,101,110,111;
这题有个很巧妙的地方,纵向计算到横向计算,
纵向计算是同加同减的,所以把横向的情况全部枚举即可。
#include<bits/stdc++.h>
using namespace std;
#define int long long
int n,m,b[1005][3],s[1005];
int mx=-0x3f3f3f;
signed main()
{
cin>>n>>m;
for(int i=0;i<n;i++)
cin>>b[i][0]>>b[i][1]>>b[i][2];
for(int k=0;k<8;k++)
{
for(int i=0;i<n;i++)
{
s[i]=0;
for(int j=0;j<3;j++)
s[i]+=(k>>j&1?b[i][j]:-b[i][j]);
}
sort(s,s+n,greater<int>());
int sum=0;
for(int i=0;i<m;i++)
sum+=s[i];
mx=max(mx,sum);
}
cout<<mx;
}