Online Judge | Problem Set | Authors | Online Contests | User | ||||||
---|---|---|---|---|---|---|---|---|---|---|
Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest |
贴个搜索的 代码1 #include<iostream> 2 #include<algorithm> 3 using namespace std; 4 const int maxn=110; 5 int n; 6 int ans; 7 int totalS,totalF; 8 struct node 9 { 10 int s,f; 11 }a[maxn]; 12 int sum[maxn]; 13 void dfs(int cnt) 14 { 15 if(cnt==n) 16 { 17 if(totalS>=0 && totalF>=0) 18 ans=max(totalS+totalF,ans); 19 return; 20 } 21 if(a[cnt].s+a[cnt].f<0 && totalS+totalF<ans) return; 22 if(totalS+totalF+sum[cnt]<=ans) return; 23 24 totalS+=a[cnt].s; 25 totalF+=a[cnt].f; 26 dfs(cnt+1); 27 28 totalS-=a[cnt].s; 29 totalF-=a[cnt].f; 30 dfs(cnt+1); 31 } 32 bool cmp(const node & n1,const node& n2) 33 { 34 return n1.s+n1.f>n2.s+n2.f; 35 } 36 int main() 37 { 38 scanf("%d",&n); 39 totalS=totalF=0; 40 ans=0; 41 for(int i=0;i<n;i++) 42 { 43 scanf("%d%d",&a[i].s,&a[i].f); 44 if(a[i].s>=0 && a[i].f>=0) 45 { 46 totalS+=a[i].s; 47 totalF+=a[i].f; 48 i--; 49 n--; 50 } 51 else if(a[i].s<0 && a[i].f<0) 52 { 53 i--; 54 n--; 55 continue; 56 } 57 } 58 ans=totalS+totalF; 59 sort(a,a+n,cmp); 60 memset(sum,0,sizeof(sum)); 61 for(int i=n-1;i>=0;i--) 62 { 63 if(a[i].s+a[i].f<=0) sum[i]=0; 64 else sum[i]=sum[i+1]+a[i].s+a[i].f; 65 } 66 dfs(0); 67 cout<<ans<<endl; 68 } Followed by:
Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator