C题:Blue Spring
标签:贪心、模拟
题意:
N
N
N天火车旅行计划,每天火车车票为
F
i
F_i
Fi元,可以购买能使用
D
D
D天的乘车劵(不一定要连续天),乘车券每张
P
P
P元。求
N
N
N天火车旅行的最少花费。
题解:贪心策略:
D
D
D天直接购买火车车票的费用超过
P
P
P元,就购买乘车劵。我们可以先按车票费用排个序,然后尽量拿费用大的去试试 能不能通过购买乘车劵降低花费。
代码:
#include <bits/stdc++.h>
using namespace std;
const int N = 2e5 + 10;
typedef long long ll;
ll n, d, p, f[N];
int main() {
cin >> n >> d >> p;
for (int i = 1; i <= n; i++) {
cin >> f[i];
}
sort(f + 1, f + 1 + n);
ll ans = 0, c = 0, sum = 0;
for (int i = n; i >= 1; i--) {
sum += f[i];
c++;
if (c == d) {
ans += min(p, sum);
c = 0;
sum = 0;
}
}
if (c > 0) ans += min(p, sum);
cout << ans << endl;
return 0;
}