| ||||||||||
| 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 | |||||||||
位运算……怎么147ms?#include<stdio.h>
const int N=21;
int n,map[N][N],ans,f[1<<20];
bool v[1<<20];
inline bool find(int x,int s)
{return s>>(x-1)&1;}
inline int max(int a,int b)
{if(a>b)return a;return b;}
int main()
{
//freopen("poj2531.in","r",stdin);
//freopen("poj2531.out","w",stdout);
scanf("%d",&n);
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
scanf("%d",&map[i][j]);
int s=(1<<n)-1;
for(int i=1;i<s;i++)
if(!v[i])
{
v[i]=1;
v[i^s]=1;
int j=1;
for(;j<=n;j++)
if(find(j,i))
break;
f[i]=f[i-(-i&i)];
for(int k=1;k<=n;k++)
if(find(k,i-(-i&i)))
f[i]-=map[j][k];
else f[i]+=map[j][k];
f[i^s]=f[i];
ans=max(ans,f[i]);
}
printf("%d\n",ans);
}
Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator