• hdu4753


      很简单的位模拟(bit-mask),可惜队友读题误以为很难,没有及时跟我交流,不然应该很早就可以出了。

      很容易看出来,总共才16个点、24条边。用一个int类型数字就可以描述这个图了,按照16点的关系可以找出已确定的那些边。然后就是很简单的DP了。

      

     1 #include <iostream>
     2 #include <cstring>
     3 #include <cstdio>
     4 #include <algorithm>
     5 using namespace std;
     6 int jb[9]={ (1<<16)|(1<<13)|(1<<4)|(1<<1),
     7              (1<<19)|(1<<16)|(1<<5)|(1<<2),
     8              (1<<22)|(1<<19)|(1<<6)|(1<<3),
     9              (1<<17)|(1<<14)|(1<<7)|(1<<4),
    10              (1<<20)|(1<<17)|(1<<8)|(1<<5),
    11              (1<<23)|(1<<20)|(1<<9)|(1<<6),
    12              (1<<18)|(1<<15)|(1<<10)|(1<<7),
    13              (1<<21)|(1<<18)|(1<<11)|(1<<8),
    14              (1<<24)|(1<<21)|(1<<12)|(1<<9)
    15 };
    16 int d[20][20];
    17 void gao(){
    18     d[1][2]=1,d[2][3]=2,d[3][4]=3;
    19     d[5][6]=4,d[6][7]=5,d[7][8]=6;
    20     d[9][10]=7,d[10][11]=8,d[11][12]=9;
    21     d[13][14]=10,d[14][15]=11,d[15][16]=12;
    22     d[1][5]=13,d[5][9]=14,d[9][13]=15;
    23     d[2][6]=16,d[6][10]=17,d[10][14]=18;
    24     d[3][7]=19,d[7][11]=20,d[11][15]=21;
    25     d[4][8]=22,d[8][12]=23,d[12][16]=24;
    26 }
    27 int zhuge(int x,int y){
    28     if(x>y) swap(x,y);
    29     return d[x][y];
    30 }
    31 int score[2],lastc;
    32 int get_lc(int em){
    33     int lc=0;
    34     for(int i=0;i<9;i++)
    35     if((em&jb[i])==jb[i])
    36         lc++;
    37     return lc;
    38 }
    39 int DP(int sc[2],int em,int id,int run,int lastc){
    40     if(run > 24) {
    41       if(sc[id]>sc[1-id]) return 1;
    42       return 0;
    43     }
    44     for(int i=1;i<=24;i++)
    45     if(!((1<<i)&em)){
    46         int n_sc[2]={sc[0],sc[1]};
    47         int n_em=em|(1<<i),lc=get_lc(n_em);
    48         n_sc[id] += lc-lastc;
    49         if(!DP(n_sc,n_em,1-id,run+1,lc)) return 1;
    50     }
    51     return 0;
    52 }
    53 int main()
    54 {
    55     gao();
    56     int cases; cin>>cases;
    57     for(int cas=1;cas<=cases;cas++){
    58         score[0]=score[1]=0;
    59         lastc=0;
    60         int id=0,em=0;
    61         int pl,run=1; cin>>pl;
    62         while(run<=pl){
    63             int x,y,e,lc;
    64             scanf("%d%d",&x,&y); e=zhuge(x,y);
    65             em |= 1<<e;   lc = get_lc(em);
    66             score[id] += lc-lastc; lastc=lc;
    67             id=1-id;
    68             run++;
    69         }
    70         int status=DP(score,em,id,run,lastc);
    71         printf("Case #%d: ",cas);
    72         if((id==0&&status) || (id==1&&!status)) printf("Tom200
    ");
    73         else printf("Jerry404
    ");
    74     }
    75     return 0;
    76 }
    View Code
  • 相关阅读:
    SQL SERVER 全文索引分词
    Json官方介绍
    SQL Try Catch(转载http://www.cnblogs.com/jimmyray/archive/2011/08/02/2125069.html)
    SQL函数记录
    SQL事务处理代码(SQL Server 2000 & 2005)
    SQL通用分页存储过程
    [导入]SoapExtension 1.0 的问题与解决
    BugTracker.NET 汉化手札
    [导入]我对J2EE和.NET的一点理解
    PostgreSQL 8.0.2 应用报告
  • 原文地址:https://www.cnblogs.com/karlvin/p/3332355.html
Copyright © 2020-2023  润新知