提交时间:2025-05-27 19:57:09

运行 ID: 37898

#include<bits/stdc++.h> #define ll long long #define pii pair<int,int> #define fi first #define se second #define mk make_pair using namespace std; const int N=1e5+10,MS=5e6; pii a[N]; int n; int f[N][3][3]; void cmn(int &a,int b){if(b<a) a=b;} void move(int id,int val,int w1,int w2,int w3,int c1,int c2,int t1,int t2){ if(val>1e9) return ; for(int i=0;i<=w1;i++){ if(i+c1+c2>3||i+c1+c2==0) continue; for(int a=0;a<=i;a++){ for(int j=0;j<=w2;j++){ if(i-a+j+c2>3||i-a+j+c2==0) continue; if(w2+a-j>3) continue; for(int b=0;b<=i-a+j;b++){ for(int k=0;k<=w3;k++){ if(i-a+j-b+k>3||i-a+j-b+k==0) continue; if(w3+b-k>3) continue; //w1 w2 w3 //w1-i w2 w3 //w1-i w2+a-j w3 //w1-i w2+a-j w3+b-k //w1+j+k-a-b w2+a-j,w3+b-k int nw1=w1+j+k-a-b,nw2=w2+a-j,nw3=w3+b-k; if(nw1<0||nw1>3) continue; //if(nw2<0||nw2>3) continue; //if(nw3<0||nw3>3) continue; //cout<<val<<' '<<t1<<' '<<t2<<endl; /*if(val+t1+t2+1==11){ cout<<val<<' '<<t1<<' '<<t2<<' '<<1<<endl; cout<<id<<' '<<nw2<<' '<<nw3<<endl; }*/ //cout<<nw1<<' '<<nw2<<' '<<nw3<<' '<<c1<<' '<<c2<<' '<<w1<<' '<<w2<<' '<<w3<<' '<<id<<' '<<val<<' '<<t1<<' '<<t2<<endl; cmn(f[id][nw2][nw3],val+t1+t2+1); } } } } } } void slv(){ memset(f,0x3f,sizeof(f)); f[0][0][0]=0; cin>>n; for(int i=1;i<=n;i++) cin>>a[i].se>>a[i].fi; sort(a+1,a+n+1); for(int i=0;i<=n;i++){ for(int j=0;j<=2;j++){ for(int k=0;k<=2;k++){ if(j+k>3) continue; int w1=3-j-k,w2=j,w3=k; int c1=0,c2=0,t1=1,t2=1; if(i>=1){ if(a[i].se==1) c1++,t1=max(t1,a[i].fi); else c2++,t2=max(t2,a[i].fi),t1=max(t1,a[i].fi); move(i,f[i-1][w2][w3],w1,w2,w3,c1,c2,t1,t2); } if(i>=2){ if(a[i-1].se==1) c1++,t1=max(t1,a[i-1].fi); else c2++,t2=max(t2,a[i-1].fi),t1=max(t1,a[i-1].fi); move(i,f[i-2][w2][w3],w1,w2,w3,c1,c2,t1,t2); } if(i>=3){ if(a[i-2].se==1) c1++,t1=max(t1,a[i-2].fi); else c2++,t2=max(t2,a[i-2].fi),t1=max(t1,a[i-2].fi); move(i,f[i-3][w2][w3],w1,w2,w3,c1,c2,t1,t2); } //cout<<i<<' '<<j<<' '<<k<<' '<<f[i][j][k]<<endl; } } for(int c=1;c<=9;c++){ for(int j=0;j<=2;j++){ for(int k=0;k<=2;k++){ if(j+k>3) continue; move(i,f[i][j][k],3-j-k,j,k,0,0,1,1); } } } /*cout<<"a: "<<a[i].fi<<endl; for(int j=0;j<=2;j++){ for(int k=0;k<=2;k++){ if(j+k>3) continue; cout<<"f: "<<i<<' '<<j<<' '<<k<<' '<<f[i][j][k]<<endl; } }*/ }cout<<f[n][0][0]<<endl; } int main(){ int t=1; slv(); return 0; }