#include <bits/stdc++.h>
using namespace std;
#define ll long long
const int nx=305;
ll n, mv, h[nx], c[nx], dp[2*nx][nx][nx], cnt[2*nx], res;
ll solve(int i, int j, int k)
{
if (dp[i][j][k]!=-1) return dp[i][j][k];
if (i==2*nx-1) return max(j-k, 0)*c[1];
dp[i][j][k]=1e18;
for (int l=0; l<=j; l++)
{
if (j-l<=k) dp[i][j][k]=min(dp[i][j][k], solve(i+1, cnt[i+1]+l, k)+l*mv);
else dp[i][j][k]=min(dp[i][j][k], solve(i+1, cnt[i+1]+l, j-l)+c[1]*((j-l)-k)+l*mv);
}
//cout<<"dp "<<i<<' '<<j<<' '<<k<<' '<<dp[i][j][k]<<'\n';
return dp[i][j][k];
}
int main()
{
cin.tie(NULL)->sync_with_stdio(false);
cin>>n>>mv;
for (int i=1; i<=n; i++) cin>>h[i]>>c[i];
for (int i=2; i<=n; i++) if (h[i]==h[1]) h[i]++, res+=mv;
for (int i=2; i<=n; i++) cnt[h[i]]++;
for (int i=0; i<2*nx; i++) for (int j=0; j<nx; j++) for (int k=0; k<nx; k++) dp[i][j][k]=-1;
solve(h[1]+1, cnt[h[1]+1], 1);
//cout<<"res "<<res<<'\n';
cout<<res+dp[h[1]+1][cnt[h[1]+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... |