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:Re:the next wa code (old one is too stupid) Posted by:Washington at 2005-09-08 09:43:12 > #include <stdio.h> > #include <string.h> > > int f[1<<10][10][6],se[10][6]; > //int g[1<<10][10][6]; > int main () > { > int t,c,n,i,j,k,r,w,max,di,cnt,ga; > scanf ("%d",&t); > for (c=1;c<=t;c++) > { > memset (f,0,sizeof (f)); > // memset (g,-1,sizeof (g)); > memset (se,0,sizeof (se)); > scanf ("%d",&n); > for (i=0;i<n;i++) > for (j=0;j<6;j++) > { > scanf ("%d",&se[i][j]); > } > for (i=0;i<n;i++) > for (j=0;j<6;j++) > { > for (k=0;k<6;k++) > { > if (se[i][k]==j+1) > { > ga=k; > if (k==0) di=5; > if (k==1) di=3; > if (k==2) di=4; > if (k==3) di=1; > if (k==4) di=2; > if (k==5) di=0; > break; > } > } > for (max=0,k=0;k<6;k++) > { > if (k==di || k==ga) continue; > if (se[i][k]>max) max=se[i][k]; > } > f[1<<i][i][se[i][di]-1]=max; > } > cnt=0; > for (i=0;i<(1<<n);i++) > { > for (j=0;j<n;j++) > { > if ((i+(1<<j))>(1<<n)-1) break; > if ((i>>j)%2==1) continue; > for (k=0;k<n;k++) > { > if ((i>>k)%2==0 || k==j) continue; > for (r=0;r<6;r++) > { > for (w=0;w<6;w++) > { > if (se[j][w]==r+1) > { > ga=w; > if (w==0) di=5; > if (w==1) di=3; > if (w==2) di=4; > if (w==3) di=1; > if (w==4) di=2; > if (w==5) di=0; > break; > } > } > for (max=0,w=0;w<6;w++) > { > if (w!=di && w!=ga && max<se[j][w]) > max=se[j][w]; > } > if (f[i+(1<<j)][j][se[j][di]-1]<f[i][k][r]+max) > { > f[i+(1<<j)][j][se[j][di]-1]=f[i][k][r]+max; > // g[i+(1<<j)][j][di]=g[i+(1<<j)][k][ga]; > } > if (f[i+(1<<j)][j][se[j][di]-1]>cnt) > cnt=f[i+(1<<j)][j][se[j][di]-1]; > } > } > } > } > /* > for (i=0;i<(1<<n);i++) > { > for (j=0;j<n;j++) > { > for (k=0;k<6;k++) > printf ("%d ",f[i][j][k]); > printf ("\n"); > } > printf ("\n"); > }*/ > > max=0; > for (i=0;i<n;i++) > for (j=0;j<6;j++) > if (f[(1<<n)-1][i][j]>max) > { > max=f[(1<<n)-1][i][j]; > } > if (max!=0) > printf ("%d\n",max); > else printf ("0\n"); > } > return 0; > } Followed by:
Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator