#include <bits/stdc++.h>
const long long IMX = 1ll << 30;
const long long LMX = 1ll << 60;
const long long MOD = 998244353;
using ll = long long;
using i128 = __int128;
using ld = long double;
using f128 = __float128;
namespace xvl_ {
#define SP(n, x) std :: setprecision(n) << std :: fixed << x
#define REP(i, l, r) for (auto i = (l); i <= (r); i++)
#define PER(i, r, l) for (auto i = (r); i >= (l); i--)
#define DEBUG(x) std :: cerr << #x << " = " << x << '\n'
#define SZ(x) (x.size())
#define fst first
#define snd second
template <typename T> T Max(T a, T b) { return a > b ? a : b; } template <typename T, typename... Args> T Max(T a, Args... args) { return a > Max(args...) ? a : Max(args...); }
template <typename T> T Min(T a, T b) { return a < b ? a : b; } template <typename T, typename... Args> T Min(T a, Args... args) { return a < Min(args...) ? a : Min(args...); }
}
using namespace std;
using namespace xvl_;
const int N = 200005, K = 15;
int n, k;
ll a[N], b[N], id[N], dp[N][K];
int main() {
// freopen("InName.in", "r", stdin);
// freopen("OutName.out", "w", stdout);
ios :: sync_with_stdio(0);
cin.tie(nullptr);
cin >> n >> k;
for (int i = 1; i <= n; i++) cin >> a[i] >> b[i], id[i] = i;
sort(id + 1, id + 1 + n, [](int x, int y) { return a[y] * b[x] + b[y] > a[x] * b[y] + b[x]; });
for (int i = 1; i <= n; i++) cout << id[i] << ' ';
cout << '\n';
for (int i = 0; i <= n; i++) dp[i][0] = 1;
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= k; j++) dp[i][j] = Max(dp[i][j], dp[i - 1][j - 1] * a[id[i]] + b[id[i]]);
}
cout << dp[n][k];
return 0;
}
样例没过。
场上 10min 想到思路,调了半个小时没跳出来。