1 条题解

  • 0
    @ 2026-3-31 17:34:54
    #include<bits/stdc++.h>
    using namespace std;
    int n;
    struct node{
    	int a,b;
    }a[1010];
    int ans;
    int dp[1010][6010][2];
    bool f[1010][6010][2];
    signed main(){
    	ios::sync_with_stdio(false);
    	cin.tie(0),cout.tie(0);
    	cin>>n;
    	for(int i=1;i<=n;i++)cin>>a[i].a>>a[i].b;
    	memset(f,0,sizeof(f));
    	memset(dp,127,sizeof(dp));
    	f[0][0][0]=1;
    	dp[0][0][0]=0;
    	f[0][0][1]=1;
    	dp[0][0][1]=0;
    	for(int i=1;i<=n;i++){
    		for(int j=-6000;j<=6000;j++){
    			int x1,x2;
    			x1=j-(a[i].a-a[i].b),x2=j-(a[i].b-a[i].a);
    			if(x1>=0){
    				int y1=abs(x1);
    				if(j>=0){
    					if(f[i-1][y1][0])dp[i][abs(j)][0]=min(dp[i][abs(j)][0],dp[i-1][y1][0]),f[i][abs(j)][0]=1;
    				}
    				else{
    					if(f[i-1][y1][0])dp[i][abs(j)][1]=min(dp[i][abs(j)][1],dp[i-1][y1][0]),f[i][abs(j)][1]=1;
    				}
    			}
    			else{
    				int y1=abs(x1);
    				if(j>=0){
    					if(f[i-1][y1][1])dp[i][abs(j)][0]=min(dp[i][abs(j)][0],dp[i-1][y1][1]),f[i][abs(j)][0]=1;
    				}
    				else{
    					if(f[i-1][y1][1])dp[i][abs(j)][1]=min(dp[i][abs(j)][1],dp[i-1][y1][1]),f[i][abs(j)][1]=1;
    				}
    			}
    			if(x2>=0){
    				int y1=abs(x2);
    				if(j>=0){
    					if(f[i-1][y1][0])dp[i][abs(j)][0]=min(dp[i][abs(j)][0],dp[i-1][y1][0]+1),f[i][abs(j)][0]=1;
    				}
    				else{
    					if(f[i-1][y1][0])dp[i][abs(j)][1]=min(dp[i][abs(j)][1],dp[i-1][y1][0]+1),f[i][abs(j)][1]=1;
    				}
    			}
    			else{
    				int y1=abs(x2);
    				if(j>=0){
    					if(f[i-1][y1][1])dp[i][abs(j)][0]=min(dp[i][abs(j)][0],dp[i-1][y1][1]+1),f[i][abs(j)][0]=1;
    				}
    				else{
    					if(f[i-1][y1][1])dp[i][abs(j)][1]=min(dp[i][abs(j)][1],dp[i-1][y1][1]+1),f[i][abs(j)][1]=1;	
    				}
    			}
    		}
    	}
    	for(int i=0;i<=6000;i++){
    		if(f[n][i][1]&&f[n][i][0]){
    			cout<<min(dp[n][i][1],dp[n][i][0]);
    			return 0;
    		}
    		if(f[n][i][1]){
    			cout<<dp[n][i][1];
    			return 0;
    		}
    		if(f[n][i][0]){
    			cout<<dp[n][i][0];
    			return 0;
    		}
    	}
    	return 0;
    }
    
    • 1

    信息

    ID
    481
    时间
    1000ms
    内存
    256MiB
    难度
    7
    标签
    (无)
    递交数
    158
    已通过
    40
    上传者