#include <iostream>
#include <bits/stdc++.h>
#define ll long long
using namespace std;
const ll maxn = 2*1e5+5, INF = 4e15+9;
void solve(){
ll n, K;
cin >> n >> K;
vector<ll> h(n+1), c(n+1);
for(int i = 1; i <= n; i++){
cin >> h[i] >> c[i];
}
int B = 605;
vector<ll> d(B+2, 0), mn(B+2, INF);
for(int i = 1; i <= n; i++){
d[h[i]]++;
mn[h[i]] = min(mn[h[i]], c[i]);
}
for(int i = 1; i <= B; i++){
mn[i] = min(mn[i], mn[i-1]);
}
auto pfmn = [&](int i) -> ll{
if(i == -1) return INF;
return mn[i];
};
auto chmin = [&](ll &a, ll b) -> void{
a = min(a, b);
};
vector<vector<ll>> f(n+1, vector<ll>(n+1, INF)), prv = f;
f[1][d[0]] = 0;
for(int i = 0; i < B; i++){
prv = f;
for(int j = 0; j <= n; j++){
for(int k = 0; k <= n; k++){
f[j][k] = INF;
}
}
for(int j = 0; j <= n; j++){
for(int k = 0; k <= n; k++){
//prv[j][k] -> f[j][d[i+1] + k-j] + (k-j) * K
int c = max(0, k - j);
if(d[i+1] + c <= n) chmin(f[j][d[i+1] + c], prv[j][k] + c * K);
}
}
for(int j = 0; j < n; j++){
for(int k = 0; k <= n; k++){
//f[j][k] -> f[j+1][k] + pfmn(i)
chmin(f[j+1][k], f[j][k] + pfmn(i));
}
}
}
ll ans = INF;
for(int j = 0; j <= n; j++){
ans = min(ans, f[j][0]);
}
cout << ans;
}
int main(){
ios_base::sync_with_stdio(false);
cin.tie(NULL);
solve();
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |