求问【悬关】
查看原帖
求问【悬关】
1060965
fanjiajun_U楼主2024/4/22 22:42

为什么下面这段代码就会TLE呢?

80分:

#include<bits/stdc++.h>
using namespace std;
struct node{
	int a;
	int b;
}shi[31];
int m,v,minn=100000,ga,gb;
bool used[31];
void dfs(int deep){
	if(minn==0){
		return;
	}
	if(ga+gb>=v){
		minn=min(abs(ga-gb),minn);
	}	
    for(int i=deep;i<=m;i++){
    	if(used[i]==0){
    		used[i]=1;
    		ga+=shi[i].a;
    		gb+=shi[i].b;
    		dfs(i+1);
    		ga-=shi[i].a;
    		gb-=shi[i].b;
    		used[i]=0;
		}
	}
	if(minn==100000){
		minn=-1;
		return ;
	}	
	return ;
}
int main(){
	scanf("%d%d",&m,&v);
	for(int i=1;i<=m;i++){
		scanf("%d%d",&shi[i].a,&shi[i].b);
	}
	dfs(0);
	printf("%d",minn);
	return 0;
}

AC:

#include<bits/stdc++.h>
using namespace std;
struct node{
	int a;
	int b;
}shi[31];
int m,v,minn=100000,ga,gb;
bool used[31];
void dfs(int deep){
	if(minn==0){
		return;
	}
	if(ga+gb>=v){
		minn=min(abs(ga-gb),minn);
	}	
    for(int i=deep;i<=m;i++){
    	if(used[i]==0){
    		used[i]=1;
    		ga+=shi[i].a;
    		gb+=shi[i].b;
    		dfs(i+1);
    		ga-=shi[i].a;
    		gb-=shi[i].b;
    		used[i]=0;
		}
	}
	return ;
}
int main(){
	scanf("%d%d",&m,&v);
	for(int i=1;i<=m;i++){
		scanf("%d%d",&shi[i].a,&shi[i].b);
	}
	dfs(0);
	if(minn==100000){
		printf("-1");
		return 0;
	}
	printf("%d",minn);
	return 0;
}

记录

2024/4/22 22:42
加载中...