Здравствуйте, помогите решить задачу.
Есть n троек чисел ti, ci, di (i-индекс). Из них нужно выбрать ровно m троек так, чтобы значение выражения |сумма выбранных t| + |сумма выбранных с| + |сумма выбранных d| была максимально возможной.
Входные данные. ( 1 ≤ n ≤ 1000 , 0 ≤ m ≤ n ) и (− 10^10 ≤ ti , di ,ci ≤ 10^10)
Пробовал тупо перебором, но на каком-то тесте программа выдает неправильный ответ
#include <iostream>
#include <vector>
#include <cmath>
#include <stdio.h>
using namespace std;
int main() {
int n, m; cin >> n >> m;
vector<long long> t,d,c;
long long max = 0;
long long sumT = 0, sumD = 0, sumC = 0, cur = 0;
for (int i = 0; i < n; ++i) cin >> t >> d >> c;
for (int i = 0; i < (1 << n); ++i) {
if (__builtin_popcount(i) == m) {
sumT = 0; sumD = 0; sumC = 0; cur = 0;
for (int j = 0; j < n; ++j) {
if (i & (1 << j)) {
sumT += t[j];
sumD += d[j];
sumC += c[j];
}
}
cur = abs(sumT) + abs(sumD) + abs(sumC);
if (cur > max) {
max = cur;
}
}
}
cout << max << endl;
return 0;
}
Есть n троек чисел ti, ci, di (i-индекс). Из них нужно выбрать ровно m троек так, чтобы значение выражения |сумма выбранных t| + |сумма выбранных с| + |сумма выбранных d| была максимально возможной.
Входные данные. ( 1 ≤ n ≤ 1000 , 0 ≤ m ≤ n ) и (− 10^10 ≤ ti , di ,ci ≤ 10^10)
Пробовал тупо перебором, но на каком-то тесте программа выдает неправильный ответ
#include <iostream>
#include <vector>
#include <cmath>
#include <stdio.h>
using namespace std;
int main() {
int n, m; cin >> n >> m;
vector<long long> t,d,c;
long long max = 0;
long long sumT = 0, sumD = 0, sumC = 0, cur = 0;
for (int i = 0; i < n; ++i) cin >> t >> d >> c;
for (int i = 0; i < (1 << n); ++i) {
if (__builtin_popcount(i) == m) {
sumT = 0; sumD = 0; sumC = 0; cur = 0;
for (int j = 0; j < n; ++j) {
if (i & (1 << j)) {
sumT += t[j];
sumD += d[j];
sumC += c[j];
}
}
cur = abs(sumT) + abs(sumD) + abs(sumC);
if (cur > max) {
max = cur;
}
}
}
cout << max << endl;
return 0;
}