那位大佬能帮我看下一下为什么会运行超时QAQ
查看原帖
那位大佬能帮我看下一下为什么会运行超时QAQ
1269864
ChenYuhui584521楼主2024/4/11 15:29
#include<iostream>
using namespace std;
int study[5][25];   //每科目每习题需要的复习时间 
int s[5];   //每科目的习题数量 
int ans=0,mintime=2000,deep=0;
int vis[5][25];   //每科目的每个习题是否访问过 
    
struct times{   //左右脑复习剩余时间
	int t1=0;
	int t2=0;
}t;


void dfs(int i,int time)
{
	if(deep==s[i]){   //深度大于习题数量 
		time+=max(t.t1,t.t2);
		if(time<mintime){
			mintime=time;	
		}
		return;
	}
	for(int j=0;j<s[i];j++){
		if(!vis[i][j]){
			struct times ts=t;
			
			if(t.t1==0){
				t.t1=study[i][j];
			}else if(t.t2==0){
				t.t2=study[i][j];
			}else{
				int item=min(t.t1,t.t2);
				time+=item;
				t.t1-=item;
				t.t2-=item;
				
				if(t.t1==0){
				t.t1=study[i][j];
				}else if(t.t2==0){
				t.t2=study[i][j];
				}
			}
			
			//添加标记 
			vis[i][j]=1;
			deep++;
			
			dfs(i,time);
			
			//消除标记 
			vis[i][j]=0;
			deep--;
			t=ts;
			
			
		}
	}	

	
	
	
}



int main()
{
	for(int i=1;i<=4;i++){
		cin>>s[i];
	}
	for(int i=1;i<=4;i++){
		for(int j=0;j<s[i];j++){
			cin>>study[i][j];
		}
	}
	
	for(int i=1;i<=4;i++){
		dfs(i,0);
		ans+=mintime;
		mintime=2000;
	} 
	
	cout<<ans;
	
	
	return 0;
 } 
2024/4/11 15:29
加载中...