• adv钓鱼题


    4
    10
    4 5
    6 2
    10 2
    10
    4 5
    6 2
    10 2
    60
    1 20
    29 20
    50 20
    60
    1 20
    20 20
    60 20
    
    #include<stdio.h>
    #define SIZE 100
    int data[SIZE];
    int Gate[3][2];
    int D[3];
    int num;
    int bushu,minbushu;
    int pos[SIZE];
    
    int leftorder(int p){
    	int	ps=Gate[p][0];
    	int people=Gate[p][1];
    	int left=0;
    	int right=num-1;
    	int orig=0;
    	int count=0;
    	for(int n=people;n>0;){
    		if(ps-orig-1>=left&&pos[ps-1-orig]==0){
    			pos[ps-orig-1]=-(p+1);
    			count=count+orig+1;
    			n--;
    		}
    		if(n==0) break;
    		if(ps-1+orig<=right&&pos[ps-1+orig]==0){
    			pos[ps+orig-1]=-(p+1);
    			n--;
    			count=count+orig+1;
    		}
    		orig++;
    	}
    	return count;
    }
    int rightorder(int p){
    	int	ps=Gate[p][0];
    	int people=Gate[p][1];
    	int left=0;
    	int right=num-1;
    	int orig=0;
    	int count=0;
    	for(int n=people;n>0;){
    		if(ps-1+orig<=right&&pos[ps-1+orig]==0){
    			pos[ps+orig-1]=-(p+1);
    			n--;
    			count=count+orig+1;
    		}
    		if(n==0) break;
    		if(ps-orig-1>=left&&pos[ps-1-orig]==0){
    			pos[ps-orig-1]=-(p+1);
    			n--;
    			count=count+orig+1;
    		}
    		orig++;
    	}
    	return count;
    }
    void init(int p){
    	for(int i=0;i<num;i++){
    		if(pos[i]==-p-1){
    			pos[i]=0;
    		}
    	}
    }
    void DFS(int step,int bushu){
    	if(step==3){
    		
    		if(bushu<minbushu){
    			minbushu=bushu;
    		}
    		return;
    	}
    	if(bushu>minbushu) return;
    	for(int i=0;i<3;i++){
    		if(!D[i]){
    			D[i]=1;
    			if(i==0){
    				DFS(step+1,bushu+leftorder(i));
    				init(i);
    			}
    			if(i==2){
    
    				DFS(step+1,bushu+rightorder(i));
    				init(i);
    			}
    			if(i==1){
    				DFS(step+1,bushu+leftorder(i));
    				init(i);
    				DFS(step+1,bushu+rightorder(i));
    				init(i);
    			}
    			D[i]=0;
    		}
    	}
    }
    
    
    int main(){
    	//将txt内数据读入
    	freopen("a.txt","r",stdin);
    	int nCase;
    	scanf("%d",&nCase);
    	for(int tc=0;tc<nCase;tc++)
    	{
    		scanf("%d",&num);
    		for(int i=0;i<3;i++)
    		{
    			scanf("%d%d",&Gate[i][0],&Gate[i][1]);
    		}
    		for(int i=0;i<3;i++){
    			D[i]=0;
    		}
    		for(int i=0;i<SIZE;i++){
    			pos[i]=0;
    		}
    		minbushu=0x0FFFFFFF;
    		bushu=0;
    		DFS(0,0);
    		printf("%d
    ",minbushu);
    		
    
    		//打印读入数据
    		/*cout<<num<<endl;
    		for(int i=0;i<3;i++){
    			cout<<Gate[i][0]<<" "<<Gate[i][1]<<endl;
    		}*/
    	}
    	return 0;
    }
    
  • 相关阅读:
    django配置日志
    drf6
    drf4
    drf3
    drf2
    drf1
    vue2
    vue3
    vue1
    choices字段、mtv和mvc模型、ajax基本语法、sweetalert弹出框插件、自定义分页器
  • 原文地址:https://www.cnblogs.com/452035305qq/p/6256389.html
Copyright © 2020-2023  润新知