DFS求助剪枝
查看原帖
DFS求助剪枝
575302
wsdyz2010楼主2023/9/19 22:33

RT,实在想不出来怎么剪枝了

#include<bits/stdc++.h>
using namespace std;
struct data{
	int s,f;
}cow[405];
int n,ans;
bool vis[1005];
void dfs(int s,int f,int c){
	if(c>n)return;
	if(s>=0&&f>=0)ans=(s+f)>ans?(s+f):ans;
	for(int i=1;i<=n;++i){
		if(s>=0&&f>=0&&cow[i].s+cow[i].f<=0)continue;
		if(!vis[i]){
			vis[i]=true;
			dfs(s+cow[i].s,f+cow[i].f,c+1);
			vis[i]=false;
		}
	}
}
signed main(){
//	freopen(".in","r",stdin);
//	freopen(".out","w",stdout);
	ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
	cin>>n;
	for(int i=1;i<=n;++i){
		cin>>cow[i].s;
		cin>>cow[i].f;
	}
	dfs(0,0,0);
	cout<<ans;
	return 0;
}
/*
5
-5 7
8 -6
6 -3
2 1
-8 -5
*/
2023/9/19 22:33
加载中...