1 条题解

  • 0
    @ 2026-1-14 15:42:45
    //经典深搜排列组合问题 
    #include<bits/stdc++.h>
    using namespace std;
    int n;
    struct stu{
    	int a,b;
    }arr[100]; 
    int brr[100]={};
    int crr[100]={};
    int min_len=1e18;
    void dfs(int len){
    	if(len==n){
    		int left=1,right=left+arr[crr[0]].b;
    		for(int i=1;i<n;i++){
    			if(arr[crr[i]].a<=arr[crr[i-1]].b){
    				left=right+1;
    			}else{
    				left=left+arr[crr[i]].a+1;
    			}
    			
    			if(i!=n-1) right=left+arr[crr[i]].b;
    		}
    		min_len=min(min_len,left);
    		return;
    	}
    	
    	for(int i=0;i<n;i++){
    		if(brr[i]==0){
    			crr[len]=i;
    			brr[i]=1;
    			dfs(len+1);
    			brr[i]=0;
    		}
    	}
    }
    int main(){
    	cin>>n;
    	for(int i=0;i<n;i++) cin>>arr[i].a;
    	for(int i=0;i<n;i++) cin>>arr[i].b;
    	
    	dfs(0);
    	cout<<min_len;
    	return 0;
    }
    
    • 1

    信息

    ID
    833
    时间
    1000ms
    内存
    256MiB
    难度
    10
    标签
    递交数
    1
    已通过
    1
    上传者