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(){
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;
}