• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            infinity

              C++博客 :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
              36 隨筆 :: 0 文章 :: 25 評(píng)論 :: 0 Trackbacks
            http://acm.pku.edu.cn/JudgeOnline/problem?id=1185
            經(jīng)典的狀態(tài)DP,做了好久才搞定。。。。
            先DFS處每行能放置的情況,并記錄下來,再用DP,狀態(tài)是二維的。

            dp方程中 ans[i][j][k]表示第i行選第j種狀態(tài) 第i-1行選第j種狀態(tài)時(shí)的
            合法方案總數(shù)。

            那么ans[i][j][k]=MAX{ans[i-1][k][l]}+one[i][j]
                  {    l為枚舉第i-2行所選的狀態(tài),且該狀態(tài)能ans[i][j][k]的狀態(tài)相容
                       one[i][j]表示第i行的j種狀態(tài)種1的個(gè)數(shù)   }
            最后的最大值即最終能放置的最多炮數(shù)ret=max{ans[i][j][k]};

             

             

            Source Code

            Problem: 1185
            User: lovecanon
            Memory: 1700K
            Time: 188MS
            Language: C++
            Result: Accepted
            • Source Code
            •     

              #include<stdio.h>
              #include
              <string.h>
              #include
              <stdlib.h>

              int R,C;
              int map[101][11];
              int State[101][61];
              int One[101][61];
              int NumOfState[101];
              int ans[101][61][61];
              void init()
              {
                  
              int i,j;
                  scanf(
              "%d%d",& R,&C);getchar();
                  
              for(i=1;i<=R;i++)
                  {
                      
              for(j=1;j<=C;j++)
                          map[i][j]
              =(getchar()=='H');
                          getchar();
                  }
              }
              void DFS(int CntR,int CntCol,unsigned int CntState,int CountOfOne,int *flag)
              {
                  
              if(CntCol>C){State[CntR][++NumOfState[CntR]]=CntState;One[CntR][NumOfState[CntR]]=CountOfOne; return ;}
                  
              if(map[CntR][CntCol]==1||(CntCol-1>=1&&flag[CntCol-1]==1||(CntCol-2>=1&&flag[CntCol-2]==1)))
                  {

                  

                      flag[CntCol]
              =0;DFS(CntR,CntCol+1,CntState<<1,CountOfOne,flag);return ;//


                  }
                  flag[CntCol]
              =0;DFS(CntR,CntCol+1,CntState<<1,CountOfOne,flag);
                  flag[CntCol]
              =1;DFS(CntR,CntCol+1,(CntState<<1)+1,CountOfOne+1,flag);
              }

              int main()
              {
                  
              int i,j,k,l,ret=0;
                  init();
                  memset(NumOfState,
              0,sizeof(NumOfState[0]));
                  
              for(i=1;i<=R;i++)
                  {
                      
              int flag[11]={0};
                      DFS(i,
              1,0,0,flag);
                  }
                  ret
              =One[1][NumOfState[1]];
                  
              for(i=1;i<=NumOfState[2];i++)
                  {
                      
              for(j=1;j<=NumOfState[1];j++)
                      {
                          ans[
              2][i][j]=0;
                          
              if((State[2][i]&State[1][j])==0) ans[2][i][j]=One[2][i]+One[1][j];
                          
              if(ans[2][i][j]>ret)  ret=ans[2][i][j];
                      }
                  }

                  
              for(i=3;i<=R;i++)
                      
              for(j=1;j<=NumOfState[i];j++)
                          
              for(k=1;k<=NumOfState[i-1];k++)
                          {
                              
              int max=0;
                              
              for(l=1;l<=NumOfState[i-2];l++)
                              {
                                   
              if((( State[i - 2][l]^State[i - 1][k])&State[i][j]) == 0)//check if it is valid
                                       if(ans[i-1][k][l]>max)  max=ans[i-1][k][l];
                                  
              //if((State[i-2][l]&State[i-1][k])==0&&(State[i-1][k]&State[i][j])==0&&(State[i-2][l]&State[i][j])==0)
                                  
              //    if(ans[i-1][k][l]>max)  max=ans[i-1][k][l];
                              }
                              ans[i][j][k]
              =max+One[i][j];
                              
              if(ans[i][j][k]>ret)  ret=ans[i][j][k];
                          }
                  printf(
              "%d\n",ret);
                  
              return 0;
              }

            posted on 2008-09-20 04:09 infinity 閱讀(2257) 評(píng)論(5)  編輯 收藏 引用 所屬分類: acm

            評(píng)論

            # re: poj 1185 炮兵陣地 2009-05-17 13:55 young,bobby
            大哥 您的程序真的錯(cuò)了 試試這組數(shù)據(jù)
            100 10
            HHHHHHHHHH
            PPPPPPPPPP
            PPPPPPPPPP
            PPPPPPPPPP
            PPPPPPPPPP
            PPPPPPPPPP
            PPPPPPPPPP
            PPPPPPPPPP
            PPPPPPPPPP
            PPPPPPPPPP
            PPPPPPPPPP
            PPPPPPPPPP
            PPPPPPPPPP
            PPPPPPPPPP
            PPPPPPPPPP
            PPPPPPPPPP
            PPPPPPPPPP
            PPPPPPPPPP
            PPPPPPPPPP
            PPPPPPPPPP
            PPPPPPPPPP
            PPPPPPPPPP
            PPPPPPPPPP
            PPPPPPPPPP
            PPPPPPPPPP
            PPPPPPPPPP
            PPPPPPPPPP
            PPPPPPPPPP
            PPPPPPPPPP
            PPPPPPPPPP
            PPPPPPPPPP
            PPPPPPPPPP
            PPPPPPPPPP
            PPPPPPPPPP
            PPPPPPPPPP
            PPPPPPPPPP
            PPPPPPPPPP
            PPPPPPPPPP
            PPPPPPPPPP
            PPPPPPPPPP
            PPPPPPPPPP
            PPPPPPPPPP
            PPPPPPPPPP
            PPPPPPPPPP
            PPPPPPPPPP
            PPPPPPPPPP
            PPPPPPPPPP
            PPPPPPPPPP
            PPPPPPPPPP
            PPPPPPPPPP
            PPPPPPPPPP
            PPPPPPPPPP
            PPPPPPPPPP
            PPPPPPPPPP
            PPPPPPPPPP
            PPPPPPPPPP
            PPPPPPPPPP
            PPPPPPPPPP
            PPPPPPPPPP
            PPPPPPPPPP
            PPPPPPPPPP
            PPPPPPPPPP
            PPPPPPPPPP
            PPPPPPPPPP
            PPPPPPPPPP
            PPPPPPPPPP
            PPPPPPPPPP
            PPPPPPPPPP
            PPPPPPPPPP
            PPPPPPPPPP
            PPPPPPPPPP
            PPPPPPPPPP
            PPPPPPPPPP
            PPPPPPPPPP
            PPPPPPPPPP
            PPPPPPPPPP
            PPPPPPPPPP
            PPPPPPPPPP
            PPPPPPPPPP
            PPPPPPPPPP
            PPPPPPPPPP
            PPPPPPPPPP
            PPPPPPPPPP
            PPPPPPPPPP
            PPPPPPPPPP
            你的答案是392 正確的答案是330 網(wǎng)上其它人ac的程序答案也是330 可是你的程序竟然ac了 。。。。。想不明白
            PPPPPPPPPP
            PPPPPPPPPP
            PPPPPPPPPP
            PPPPPPPPPP
            PPPPPPPPPP
            PPPPPPPPPP
            PPPPPPPPPP
            PPPPPPPPPP
            PPPPPPPPPP
            PPPPPPPPPP
            PPPPPPPPPP
            PPPPPPPPPP
            PPPPPPPPPP
            PPPPPPPPPP
            PPPPPPPPPP  回復(fù)  更多評(píng)論
              

            # re: poj 1185 炮兵陣地 2009-05-17 14:01 還是我
            大哥 您的程序真的錯(cuò)了 試試這組數(shù)據(jù)
            100 10
            HHHHHHHHHH
            PPPPPPPPPP
            PPPPPPPPPP
            PPPPPPPPPP
            PPPPPPPPPP
            PPPPPPPPPP
            PPPPPPPPPP
            PPPPPPPPPP
            PPPPPPPPPP
            PPPPPPPPPP
            PPPPPPPPPP
            PPPPPPPPPP
            PPPPPPPPPP
            PPPPPPPPPP
            PPPPPPPPPP
            PPPPPPPPPP
            PPPPPPPPPP
            PPPPPPPPPP
            PPPPPPPPPP
            PPPPPPPPPP
            PPPPPPPPPP
            PPPPPPPPPP
            PPPPPPPPPP
            PPPPPPPPPP
            PPPPPPPPPP
            PPPPPPPPPP
            PPPPPPPPPP
            PPPPPPPPPP
            PPPPPPPPPP
            PPPPPPPPPP
            PPPPPPPPPP
            PPPPPPPPPP
            PPPPPPPPPP
            PPPPPPPPPP
            PPPPPPPPPP
            PPPPPPPPPP
            PPPPPPPPPP
            PPPPPPPPPP
            PPPPPPPPPP
            PPPPPPPPPP
            PPPPPPPPPP
            PPPPPPPPPP
            PPPPPPPPPP
            PPPPPPPPPP
            PPPPPPPPPP
            PPPPPPPPPP
            PPPPPPPPPP
            PPPPPPPPPP
            PPPPPPPPPP
            PPPPPPPPPP
            PPPPPPPPPP
            PPPPPPPPPP
            PPPPPPPPPP
            PPPPPPPPPP
            PPPPPPPPPP
            PPPPPPPPPP
            PPPPPPPPPP
            PPPPPPPPPP
            PPPPPPPPPP
            PPPPPPPPPP
            PPPPPPPPPP
            PPPPPPPPPP
            PPPPPPPPPP
            PPPPPPPPPP
            PPPPPPPPPP
            PPPPPPPPPP
            PPPPPPPPPP
            PPPPPPPPPP
            PPPPPPPPPP
            PPPPPPPPPP
            PPPPPPPPPP
            PPPPPPPPPP
            PPPPPPPPPP
            PPPPPPPPPP
            PPPPPPPPPP
            PPPPPPPPPP
            PPPPPPPPPP
            PPPPPPPPPP
            PPPPPPPPPP
            PPPPPPPPPP
            PPPPPPPPPP
            PPPPPPPPPP
            PPPPPPPPPP
            PPPPPPPPPP
            PPPPPPPPPP
            PPPPPPPPPP
            PPPPPPPPPP
            PPPPPPPPPP
            PPPPPPPPPP
            PPPPPPPPPP
            PPPPPPPPPP
            PPPPPPPPPP
            PPPPPPPPPP
            PPPPPPPPPP
            PPPPPPPPPP
            PPPPPPPPPP
            PPPPPPPPPP
            PPPPPPPPPP
            PPPPPPPPPP
            PPPPPPPPPP
            你的答案是392 正確的答案是330 網(wǎng)上其它人ac的程序答案也是330 可是你的程序竟然ac了 。。。。。想不明白 人品???
            大家注意  回復(fù)  更多評(píng)論
              

            # re: poj 1185 炮兵陣地[未登錄] 2009-05-20 13:08 infinity
            可能吧 我有時(shí)間再看看  回復(fù)  更多評(píng)論
              

            # re: poj 1185 炮兵陣地 2009-12-02 22:46 iloveyty
            sometimes ,rp is really a very importtant thing  回復(fù)  更多評(píng)論
              

            # re: poj 1185 炮兵陣地 2011-05-13 09:51 dwang
            線段樹  回復(fù)  更多評(píng)論
              

            偷窥少妇久久久久久久久| 99精品久久久久久久婷婷 | 国产精品久久久久影院嫩草| 久久久久久亚洲Av无码精品专口| 蜜臀av性久久久久蜜臀aⅴ| 精品一区二区久久| 无码任你躁久久久久久| 一本一道久久a久久精品综合 | 久久婷婷久久一区二区三区| 欧美日韩成人精品久久久免费看| 亚洲精品乱码久久久久久蜜桃图片| 94久久国产乱子伦精品免费 | 久久99精品国产99久久| 97精品依人久久久大香线蕉97| 久久r热这里有精品视频| 亚洲精品美女久久777777| 婷婷久久综合| 久久精品国产亚洲5555| 久久九九免费高清视频| 9999国产精品欧美久久久久久| 国产69精品久久久久777| 亚洲综合久久夜AV | 国产精自产拍久久久久久蜜| 2021精品国产综合久久| 四虎国产精品成人免费久久| 久久亚洲高清综合| 国产成人无码精品久久久久免费| 国产产无码乱码精品久久鸭| 久久人人添人人爽添人人片牛牛| 婷婷久久精品国产| 中文成人久久久久影院免费观看| 久久艹国产| 日产久久强奸免费的看| 久久免费观看视频| 精品久久人人爽天天玩人人妻 | 国产精品一区二区久久精品涩爱| 精品欧美一区二区三区久久久| 伊人久久免费视频| 狠狠色丁香婷婷综合久久来来去| 亚洲欧美日韩精品久久| 久久国产精品免费|