| ||||||||||
| 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 | |||||||||
Re:贴个搜索的 代码In Reply To:贴个搜索的 代码 Posted by:ysymi at 2013-02-03 20:18:12 > 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