求助,剪枝之后还有两个点TLE
查看原帖
求助,剪枝之后还有两个点TLE
1251134
鹿幽凌楼主2025/7/28 20:20
#include <bits/stdc++.h>
using namespace std;
int n,v;
const int MAXN=40;
int a[MAXN],b[MAXN];
int ans=-1;
int ah,bh;
int k;
bool tem[MAXN];
void dfs(int x){

	if(ah+bh>=v){
		if(ans==-1){
			ans=abs(ah-bh);
		}else if(ans>abs(ah-bh)){
			ans=abs(ah-bh);
		}
	}
	if(ans==0){
		return;
	} 
	if(ah+bh<v){
		if(k==n){
			return;
		}
		for(int i=1;i<=n;i++){
			if(!tem[i]){
				k++;
				ah+=a[i];
				bh+=b[i];
				tem[i]=true;
				dfs(k);
				k--;
				ah-=a[i];
				bh-=b[i];
				tem[i]=false;
			}
		}
	}
}
int main(){
	cin>>n>>v;
	for(int i=1;i<=n;i++){
		cin>>a[i]>>b[i];
	}
	dfs(1);
	cout<<ans<<endl;
	return 0;
}

请问大佬这个怎么办啊

2025/7/28 20:20
加载中...