Submission #978812

#TimeUsernameProblemLanguageResultExecution timeMemory
978812MilosMilutinovicSki 2 (JOI24_ski2)C++14
100 / 100
693 ms24784 KiB
#include<bits/stdc++.h>
 
#define pb push_back
#define fi first
#define se second
#define mp make_pair
 
using namespace std;
 
typedef long long ll;
typedef unsigned long long ull;
typedef pair<int,int> pii;
typedef pair<ll,ll> pll;
typedef long double ld;
 
template <typename T> bool chkmin(T &x,T y){return x>y?x=y,1:0;}
template <typename T> bool chkmax(T &x,T y){return x<y?x=y,1:0;}
 
ll readint(){
	ll x=0,f=1; char ch=getchar();
	while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
	while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}
	return x*f;
}

const ll inf=(ll)1e18;
int n,k;
int h[305],c[305];
ll dp[2][305][305]; // (pos,bal,unmatch)
vector<int> val[900505];
vector<pii> states[2];

int main(){
	n=readint(); k=readint();
	for(int i=1;i<=n;i++) h[i]=readint(),c[i]=readint();
	vector<int> xs;
	for(int i=1;i<=n;i++){
		for(int j=0;j<=n;j++){
			xs.pb(h[i]+j);
		}
	}
	sort(xs.begin(),xs.end());
	xs.erase(unique(xs.begin(),xs.end()),xs.end());
	for(int i=1;i<=n;i++){
		int p=(int)(lower_bound(xs.begin(),xs.end(),h[i])-xs.begin());
		val[p].pb(c[i]);
	}
	for(int i=0;i<=n;i++){
		for(int j=0;j<=n;j++){
			dp[0][i][j]=inf;
			dp[1][i][j]=inf;
		}
	}
	dp[1][1][0]=0;
	states[1].pb(mp(1,0));
	int p=1,q=0;
	int mn=-1;
	for(int x=0;x<(int)xs.size();x++){
		swap(p,q);
		for(auto st:states[p]){
			dp[p][st.fi][st.se]=inf;
		}
		states[p].clear();
		int sz=(int)val[x].size();
		for(auto st:states[q]){
			int i=st.fi,j=st.se;
			if(dp[q][i][j]==inf) continue;
			int t=min(i,j+sz);
			for(int f=0;f<=sz+j-t;f++){
				if(mn==-1&&f>0) break;
				if(dp[p][min(n,i+f)][min(n,(sz+j-t)-f)]==inf) states[p].pb(mp(min(n,i+f),min(n,(sz+j-t)-f)));
				chkmin(dp[p][min(n,i+f)][min(n,(sz+j-t)-f)],dp[q][i][j]+k*1ll*j+f*1ll*mn);
			}
		}
		for(auto p:val[x]) mn=(mn==-1?p:min(mn,p));
	}
	ll ans=(ll)1e18;
	for(int i=1;i<=n;i++) ans=min(ans,dp[p][i][0]);
	printf("%lld\n",ans);
	return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...