#include <bits/stdc++.h>
using namespace std;
#define ll long long
#pragma GCC optimize("O3,unroll-loops")
#pragma GCC target("avx2,bmi,bmi2,lzcnt,popcnt")
const ll nx=305, inf=1e18;
ll n, mv, h[nx], c[nx], dp[nx][nx][nx], cnt[nx], mn[nx], res, ans=inf;
pair<pair<ll, ll>, ll> fmn={{inf, inf}, inf};
set<ll> s;
map<ll, ll> mp;
vector<ll> cmp;
int main()
{
    cin.tie(NULL)->sync_with_stdio(false);
    cin>>n>>mv;
    for (int i=1; i<=n; i++) cin>>h[i]>>c[i], fmn=min(fmn, {{h[i], c[i]}, i});
    int st=fmn.second;
    for (int i=1; i<=n; i++) if (!(i==st||h[i]>h[st])) res+=(h[st]+1-h[i])*mv, h[i]=h[st]+1;
    for (int i=1; i<=n; i++) mp[h[i]]++;
    for (auto [x, y]:mp) for (int i=0; i<y; i++) s.insert(x+i);
    for (auto x:s) cmp.push_back(x);
    sort(cmp.begin(), cmp.end());
    for (int i=0; i<nx; i++) mn[i]=1e18;
    for (int i=1; i<=n; i++) 
    {
        ll idx=lower_bound(cmp.begin(), cmp.end(), h[i])-cmp.begin();
        mn[idx]=min(mn[idx], c[i]), cnt[idx]++;
    }
    for (int i=1; i<nx; i++) mn[i]=min(mn[i], mn[i-1]);
    for (int i=0; i<cmp.size(); i++) for (int j=0; j<nx; j++) for (int k=0; k<nx; k++) dp[i][j][k]=1e18;
    cmp.push_back(1e18);
    for (int i=cmp.size()-2; i>0; i--)
    {
        for (int j=0; j<=n; j++)
        {
            for (int k=j+1; k<=n; k++) dp[i][j][k]=dp[i+1][cnt[i+1]][k];
            if (cmp[i+1])
            if (cmp[i]+1==cmp[i+1])
            {
                ll cur=1e18;
                for (int k=j; k>=0; k--)
                {
                    cur=min(cur, dp[i+1][cnt[i+1]+j-k][k]+k*mn[i-1]+(j-k)*mv);
                    dp[i][j][k]=cur-k*mn[i-1];
                }
            }
            else
            {
                for (int k=j; k>=0; k--) dp[i][j][k]=dp[i+1][cnt[i+1]][j]+mv*(j-k);
            }
        }
    }
    cout<<res+dp[1][cnt[1]][1];
}
| # | 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... |