以下是我的赛时代码,获得了 AC:
#include <bits/stdc++.h>
#define int long long
#define For(i, a, b) for (int i = (a); i <= (b); i ++)
#define foR(i, a, b) for (int i = (a); i >= (b); i --)
using namespace std;
int n, k;
int f[12];
struct Node {int x, y;}a[200005];
bool cmp (Node n1, Node n2) {return n1.y > n2.y || n1.y == n2.y && n1.x < n2.x;}
void solve () {
cin >> n >> k;
For (i, 1, n) cin >> a[i].x >> a[i].y;
sort (a + 1, a + n + 1, cmp);
f[0] = 1;
For (i, 1, n) {
foR (j, min (i, k), 1) {
f[j] = max (f[j], f[j - 1] * a[i].x + a[i].y);
}
}
cout << f[k];
}
signed main () {
int _ = 1;
// cin >> _;
while (_ --) {
solve ();
cout << '\n';
}
return 0;
}
但是有一个显然的 Hack:
3 3
100 2
1 1
1 1
Answer: 302
Output: 104
所以这个题是不是错了?