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:一个剪枝16ms,0ms是怎么出来的?In Reply To:Re:一个剪枝16ms,0ms是怎么出来的? Posted by:openxxx at 2010-02-21 13:48:32 > 0ms。。。 #include<stdio.h> int map[25][25]; int in[25]; int out[25]; int n,ans; void dfs(int k,int s,int ni,int no) { int i,sum; if(s>=ans) return; sum=0; for(i=1;i<=ni;i++) sum+=map[in[i]][k]; if(k==n) { if(s+sum<ans) ans=s+sum; } else { in[ni+1]=k; dfs(k+1,s+sum,ni+1,no); } sum=0; for(i=1;i<=no;i++) sum+=map[out[i]][k]; if(k==n) { if(s+sum<ans) ans=s+sum; } else { out[no+1]=k; dfs(k+1,s+sum,ni,no+1); } return; } int main() { int i,j,k,p=0,q=0; scanf("%d",&n); ans=0; for(i=1;i<=n;i++) { for(j=1;j<=n;j++) { scanf("%d",&map[i][j]); ans+=map[i][j]; } } k=ans/2; for(i=1;i<=n/2-1;i++) { for(j=1;j<=n/2-1;j++) p+=map[i][j]; } p=p/2; for(i=n/2;i<=n;i++) { for(j=n/2;j<=n;j++) q+=map[i][j]; } q=q/2; ans=p+q; in[1]=1; dfs(2,0,1,0); printf("%d\n",k-ans); return 0; } Followed by:
Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator