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 |
你的算法还不如我的暴搜In Reply To:题目太BT 了,差不多的代码,一个AC , 一个TLE,另附有N=20的测试数据 Posted by:421 at 2009-05-20 18:57:28 #include<iostream> using namespace std; int add_one(int b[],int n) { b[n]++; int i; i=n; while(b[i]>1 && i>0) { b[i-1]++; b[i]=0; i--; } return b[0]; } int main() { int b[21];//表示被分配到哪一组。可将其表示为一个二进制数,从1开始。 int g[21][21]; //表示路径。 int n,i,j,sum,max; while(cin>>n) { if(n<=1) break; for(i=1;i<=n;i++) for(j=1;j<=n;j++) cin>>g[i][j]; memset(b,0,sizeof(b)); add_one(b,n); max=0; while(b[0]==0) { sum=0; for(i=1;i<=n;i++) { if(b[i]==0) { for(j=1;j<=n;j++) { if(b[j]==1) sum+=g[i][j]; } } } if(sum>max) max=sum; if(b[1]==1) //很好的对称剪支,速度快了一倍,要不然会超时。 break; add_one(b,n); } cout<<max<<endl; } return 0; } Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator