2#include3#include4#include5#defineMAXN1606#defineMAXM207#defineMAXL2808usingnamespacestd;9intn,m;10boolland[MAXN][MAXM];11intput[MAXL][MAXM],cnt[MAXL],tmp[MAXM],size;12vectorG[MAX" />

亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

【POJ】1038 Bugs Integrated, Inc.

系統 1606 0
      
          1
      
       #include<cstdio>


      
          2
      
       #include<cstring>


      
          3
      
       #include<vector>


      
          4
      
       #include<algorithm>


      
          5
      
      
        #define
      
       MAXN 160


      
          6
      
      
        #define
      
       MAXM 20


      
          7
      
      
        #define
      
       MAXL 280


      
          8
      
      
        using
      
      
        namespace
      
      
         std;


      
      
          9
      
      
        int
      
      
         n,m;


      
      
         10
      
      
        bool
      
      
         land[MAXN][MAXM];


      
      
         11
      
      
        int
      
      
         put[MAXL][MAXM],cnt[MAXL],tmp[MAXM],size;


      
      
         12
      
       vector<
      
        int
      
      >
      
        G[MAXL];


      
      
         13
      
      
        int
      
       dp[
      
        2
      
      
        ][MAXL][MAXL];


      
      
         14
      
      
        bool
      
      
         OK()


      
      
         15
      
      
        {


      
      
         16
      
      
        int
      
      
         i,j,k,res;


      
      
         17
      
      
        for
      
      (i=res=
      
        0
      
      ;i<m;i++
      
        )


      
      
         18
      
      
            {


      
      
         19
      
      
        if
      
      
        (tmp[i])


      
      
         20
      
      
                {


      
      
         21
      
      
        for
      
      (j=i;j<m&&tmp[i]==tmp[j];j++
      
        );


      
      
         22
      
                   k=j-
      
        i;


      
      
         23
      
      
        if
      
      (tmp[i]==
      
        1
      
      
        )


      
      
         24
      
      
                    {


      
      
         25
      
      
        if
      
      (k%
      
        3
      
      
        )


      
      
         26
      
      
        return
      
      
        false
      
      
        ;


      
      
         27
      
                       res+=k/
      
        3
      
      
        ;


      
      
         28
      
      
                    }


      
      
         29
      
      
        else
      
      
         30
      
      
                    {


      
      
         31
      
      
        if
      
      (k&
      
        1
      
      
        )


      
      
         32
      
      
        return
      
      
        false
      
      
        ;


      
      
         33
      
                       res+=k>>
      
        1
      
      
        ;


      
      
         34
      
      
                    }


      
      
         35
      
                   i=j-
      
        1
      
      
        ;


      
      
         36
      
      
                }


      
      
         37
      
      
            }


      
      
         38
      
           cnt[size]=
      
        res;


      
      
         39
      
      
        return
      
      
        true
      
      
        ;


      
      
         40
      
      
        }


      
      
         41
      
      
        void
      
       DFS(
      
        int
      
      
         now)


      
      
         42
      
      
        {


      
      
         43
      
      
        if
      
      (now==
      
        m)


      
      
         44
      
      
            {


      
      
         45
      
      
        if
      
      
        (OK())


      
      
         46
      
                   memcpy(put[size++],tmp,
      
        sizeof
      
      
        (tmp));


      
      
         47
      
      
            }


      
      
         48
      
      
        else
      
      
         49
      
      
            {


      
      
         50
      
      
        int
      
      
         i;


      
      
         51
      
      
        for
      
      (i=
      
        0
      
      ;i<
      
        3
      
      ;i++
      
        )


      
      
         52
      
      
                {


      
      
         53
      
                   tmp[now]=
      
        i;


      
      
         54
      
                   DFS(now+
      
        1
      
      
        );


      
      
         55
      
      
                }


      
      
         56
      
      
            }


      
      
         57
      
      
        }


      
      
         58
      
      
        bool
      
       Upper(
      
        int
      
       x,
      
        int
      
      
         y)


      
      
         59
      
      
        {


      
      
         60
      
      
        int
      
      
         i;


      
      
         61
      
      
        for
      
      (i=
      
        0
      
      ;i<m;i++
      
        )


      
      
         62
      
      
            {


      
      
         63
      
      
        if
      
      (put[x][i]&&
      
        put[y][i])


      
      
         64
      
      
        return
      
      
        false
      
      
        ;


      
      
         65
      
      
            }


      
      
         66
      
      
        return
      
      
        true
      
      
        ;


      
      
         67
      
      
        }


      
      
         68
      
      
        void
      
      
         Init()


      
      
         69
      
      
        {


      
      
         70
      
      
        int
      
      
         i,j;


      
      
         71
      
           size=
      
        0
      
      
        ;


      
      
         72
      
           memset(land,
      
        false
      
      ,
      
        sizeof
      
      
        (land));


      
      
         73
      
           memset(dp,
      
        0
      
      ,
      
        sizeof
      
      
        (dp));


      
      
         74
      
           DFS(
      
        0
      
      
        );


      
      
         75
      
      
        for
      
      (i=
      
        0
      
      ;i<size;i++
      
        )


      
      
         76
      
      
            {


      
      
         77
      
      
                G[i].clear();


      
      
         78
      
      
        for
      
      (j=
      
        0
      
      ;j<size;j++
      
        )


      
      
         79
      
      
                {


      
      
         80
      
      
        if
      
      
        (Upper(i,j))


      
      
         81
      
      
                        G[i].push_back(j);


      
      
         82
      
      
                }


      
      
         83
      
      
            }


      
      
         84
      
      
        }


      
      
         85
      
      
        bool
      
       Unfit(
      
        int
      
       r,
      
        int
      
      
         x)


      
      
         86
      
      
        {


      
      
         87
      
      
        int
      
      
         i;


      
      
         88
      
      
        for
      
      (i=
      
        0
      
      ;i<m;i++
      
        )


      
      
         89
      
      
            {


      
      
         90
      
      
        if
      
      (land[r][i]&&
      
        put[x][i])


      
      
         91
      
      
        return
      
      
        true
      
      
        ;


      
      
         92
      
      
            }


      
      
         93
      
      
        return
      
      
        false
      
      
        ;


      
      
         94
      
      
        }


      
      
         95
      
      
        bool
      
       First(
      
        int
      
      
         x)


      
      
         96
      
      
        {


      
      
         97
      
      
        int
      
      
         i;


      
      
         98
      
      
        for
      
      (i=
      
        0
      
      ;i<m;i++
      
        )


      
      
         99
      
      
            {


      
      
        100
      
      
        if
      
      (put[x][i]==
      
        2
      
      ||put[x][i]&&land[
      
        1
      
      
        ][i])


      
      
        101
      
      
        return
      
      
        true
      
      
        ;


      
      
        102
      
      
            }


      
      
        103
      
      
        return
      
      
        false
      
      
        ;


      
      
        104
      
      
        }


      
      
        105
      
      
        bool
      
       Three(
      
        int
      
       x,
      
        int
      
       y,
      
        int
      
      
         k)


      
      
        106
      
      
        {


      
      
        107
      
      
        int
      
      
         i;


      
      
        108
      
      
        for
      
      (i=
      
        0
      
      ;i<m;i++
      
        )


      
      
        109
      
      
            {


      
      
        110
      
      
        if
      
      (put[x][i]==
      
        2
      
      
        )


      
      
        111
      
      
                {


      
      
        112
      
      
        if
      
      (put[y][i]||
      
        land[k][i])


      
      
        113
      
      
        return
      
      
        true
      
      
        ;


      
      
        114
      
      
                }


      
      
        115
      
      
            }


      
      
        116
      
      
        return
      
      
        false
      
      
        ;


      
      
        117
      
      
        }


      
      
        118
      
      
        void
      
      
         DoIt()


      
      
        119
      
      
        {


      
      
        120
      
      
        int
      
      
         i,j,k,t,x,y,ans;


      
      
        121
      
      
        for
      
      (ans=i=
      
        0
      
      ;i<size;i++
      
        )


      
      
        122
      
      
            {


      
      
        123
      
      
        if
      
      (Unfit(
      
        2
      
      ,i)||
      
        First(i))


      
      
        124
      
      
        continue
      
      
        ;


      
      
        125
      
               dp[
      
        0
      
      ][i][
      
        0
      
      ]=
      
        cnt[i];


      
      
        126
      
      
            }


      
      
        127
      
      
        for
      
      (i=
      
        3
      
      ;i<=n;i++
      
        )


      
      
        128
      
      
            {


      
      
        129
      
      
        for
      
      (j=
      
        0
      
      ;j<size;j++
      
        )


      
      
        130
      
      
                {


      
      
        131
      
      
        if
      
      
        (Unfit(i,j))


      
      
        132
      
      
        continue
      
      
        ;


      
      
        133
      
      
        for
      
      (k=
      
        0
      
      ;k<G[j].size();k++
      
        )


      
      
        134
      
      
                    {


      
      
        135
      
                       x=
      
        G[j][k];


      
      
        136
      
      
        if
      
      (Unfit(i-
      
        1
      
      ,x)||Unfit(i-
      
        1
      
      
        ,j))


      
      
        137
      
      
        continue
      
      
        ;


      
      
        138
      
      
        for
      
      (t=
      
        0
      
      ;t<G[x].size();t++
      
        )


      
      
        139
      
      
                        {


      
      
        140
      
                           y=
      
        G[x][t];


      
      
        141
      
      
        if
      
      (Unfit(i-
      
        2
      
      ,y)||Unfit(i-
      
        2
      
      ,x)||Three(j,y,i-
      
        2
      
      
        ))


      
      
        142
      
      
        continue
      
      
        ;


      
      
        143
      
                           dp[i&
      
        1
      
      ][j][x]=max(dp[i&
      
        1
      
      ][j][x],dp[(i-
      
        1
      
      )&
      
        1
      
      ][x][y]+
      
        cnt[j]);


      
      
        144
      
      
                        }


      
      
        145
      
                       ans=max(ans,dp[i&
      
        1
      
      
        ][j][x]);


      
      
        146
      
      
                    }


      
      
        147
      
      
                }


      
      
        148
      
      
            }


      
      
        149
      
           printf(
      
        "
      
      
        %d\n
      
      
        "
      
      
        ,ans);


      
      
        150
      
      
        }


      
      
        151
      
      
        int
      
      
         main()


      
      
        152
      
      
        {


      
      
        153
      
      
        int
      
      
         c,q,x,y;


      
      
        154
      
           scanf(
      
        "
      
      
        %d
      
      
        "
      
      ,&
      
        c);


      
      
        155
      
      
        while
      
      (c--
      
        )


      
      
        156
      
      
            {


      
      
        157
      
               scanf(
      
        "
      
      
        %d%d%d
      
      
        "
      
      ,&n,&m,&
      
        q);


      
      
        158
      
      
                Init();


      
      
        159
      
      
        while
      
      (q--
      
        )


      
      
        160
      
      
                {


      
      
        161
      
                   scanf(
      
        "
      
      
        %d%d
      
      
        "
      
      ,&x,&
      
        y);


      
      
        162
      
                   land[x][y-
      
        1
      
      ]=
      
        true
      
      
        ;


      
      
        163
      
      
                }


      
      
        164
      
      
                DoIt();


      
      
        165
      
      
            }


      
      
        166
      
      
        return
      
      
        0
      
      
        ;


      
      
        167
      
       }
    

【POJ】1038 Bugs Integrated, Inc.


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!??!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 亚洲国产99999在线精品一区 | 久久国产精品男女热播 | 亚洲免费网站在线观看 | 尤物精品视频在线观看 | 在线播放日本爽快片 | 欧洲成人免费视频 | 欧美成人免费在线观看 | 玖玖国产精品 | 欧美日韩色黄大片在线视频 | 激情五月婷婷网 | 在线免费观看a视频 | 99国产超薄丝袜足j在线播放 | 国产亚洲一区二区三区在线观看 | 欧美一级刺激毛片 | 在线精品视频成人网 | 天天插天天操 | 激情综合网五月 | 欧美日中文字幕 | 大学生一级黄色片 | 久久精品国产亚洲黑森林 | 欧美国产日韩久久久 | 久久国产乱子伦精品免费看 | 青草久草视频 | 福利在线网 | 四虎4hu永久免费国产精品 | 精品四虎免费观看国产高清午夜 | 国产免费一区二区在线看 | 久青草国产高清在线视频 | 久久99国产精品久久99小说 | 欧美亚洲国产视频 | 综合色婷婷 | 特级毛片免费视频 | 精品久久久久久亚洲精品 | 国内偷自视频区视频综合 | 久久久国产这里有的是精品 | 国产欧美日韩精品一区二区三区 | 2019年国产高清情侣视频 | 嫩草视频在线观看 | 亚洲国产精品成人综合色在线婷婷 | 久青草视频免费观看青 | 一个色亚洲 |