Online JudgeProblem SetAuthorsOnline ContestsUser
Web Board
Home Page
F.A.Qs
Statistical Charts
Problems
Submit Problem
Online Status
Prob.ID:
Register
Update your info
Authors ranklist
Current Contest
Past Contests
Scheduled Contests
Award Contest
User ID:
Password:
  Register

非常 奇怪```有两个变量不能动,一动就WA或者RE 搞不懂,.什么问题?

Posted by __sunshine at 2009-09-19 18:05:33 on Problem 1085
#include <iostream>

#define MAX_LINE 18

#define MAX_T 9

#define MAX_SN 0X40000

#define MAXN 1<<18
using namespace std;


int exp[MAX_LINE + 1] = {0, 0X1, 0x2, 0x4, 0x8, 0x10, 0x20, 0x40, 0x80, 0x100, 0x200, 0x400, 0x800, 0x1000, 0x2000, 0x4000, 0x8000, 0x10000, 0x20000};


int f[MAX_SN + 5], mark[10][10],n; 
/************** 就是下面caseN 和 stepN ,为什么呢,赐教************/
int caseN, stepN;

int edge[19][4] = {{0,0,0,0},{2,3,0,0},{1,3,0,0},{1,2,5,6},{5,8,0,0},{3,6,4,8},{3,5,7,9},
                   {6,9,0,0},{4,5,11,12},{6,7,13,14},{11,16,0,0},{10,16,8,12},{8,11,13,17},
                   {12,17,9,14},{9,13,15,18},{14,18,0,0},{10,11,0,0},{12,13,0,0},{14,15,0,0}};

void init()
{
    mark[1][2] = 1; mark[1][3] = 2; mark[2][3] = 3; mark[2][4] = 4; mark[2][5] = 5; 
    mark[3][5] = 6; mark[3][6] = 7; mark[4][5] = 8; mark[5][6] = 9; mark[4][7] = 10;
    mark[4][8] = 11; mark[5][8] = 12; mark[5][9] = 13; mark[6][9] = 14;
    mark[6][10] = 15; mark[7][8] = 16; mark[8][9] = 17; mark[9][10] = 18;
}




int  takeStep(int state,int nub){
     bool good=true;
     int v,num=0;
     for(int i=0;i<2;i++){
             v=exp[edge[nub][i]];
             if((v&state)==0){
                  good=false;
                  break;
             }
     }
     if(good)num++;
     good=true;
     for(int i=2;i<4;i++){
             v=exp[edge[nub][i]];
             if((state&v)==0){
                  good=false;
                  break;
             }
     }
     if(good)num++;
     
     return num;
}

int dpSolve(int state){
    if(f[state]!=INT_MIN)return f[state];
    
    int fag=1,tag,v,num,ans=INT_MIN;
    for(int i=1;i<19;i++){
            if((state&exp[i])==0){
                 num=takeStep(state,i);
                 if(num>0)tag=num+dpSolve(state|exp[i]);
                 else tag=num-dpSolve(state|exp[i]);
                 ans=max(ans,tag);
            }
    }
    return f[state]=ans;
}
      

int main(){
    init();
    int caseN,from,to,state,fag,tage,nb,tim=0;
    scanf("%d",&caseN);
    while(caseN--){
         scanf("%d",&n);
         for(int i=0;i<=MAX_SN;i++)f[i]=INT_MIN;
         f[0X3ffff] = 0;
         state=tage=0;
         fag=1;
         int num=0;
         for(int i=0;i<n;i++){
                 scanf("%d%d",&from,&to);
                 if(from>to)swap(from,to);
                 nb=mark[from][to];
                 num=takeStep(state,nb);
                 state|=exp[nb];
                
                 if(num>0){
                      tage+=fag*num;
                 }
                 else fag*=-1;
         }
     
         tage+=fag*dpSolve(state);
        
         printf(tage>0?"Game %d: A wins.\n":"Game %d: B wins.\n",++tim);
         
    }
    system("PAUSE");
    return 0;
}


Followed by:

Post your reply here:
User ID:
Password:
Title:

Content:

Home Page   Go Back  To top


All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator