• <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 評論 :: 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ù)。

            那么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的個數(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 閱讀(2238) 評論(5)  編輯 收藏 引用 所屬分類: acm

            評論

            # re: poj 1185 炮兵陣地 2009-05-17 13:55 young,bobby
            大哥 您的程序真的錯了 試試這組數(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  回復  更多評論
              

            # re: poj 1185 炮兵陣地 2009-05-17 14:01 還是我
            大哥 您的程序真的錯了 試試這組數(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了 。。。。。想不明白 人品???
            大家注意  回復  更多評論
              

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

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

            # re: poj 1185 炮兵陣地 2011-05-13 09:51 dwang
            線段樹  回復  更多評論
              

            97精品国产97久久久久久免费| 久久99精品国产麻豆婷婷| 色婷婷综合久久久久中文字幕 | 国产成人久久精品麻豆一区| 久久久久国产一级毛片高清板| 波多野结衣久久一区二区| 国产69精品久久久久777| 精品久久人人做人人爽综合| 香蕉久久夜色精品国产尤物| 久久久国产精品福利免费| 久久人人爽人人爽人人片AV不 | 综合久久一区二区三区| 欧美激情精品久久久久| 天天综合久久一二三区| 久久91精品国产91久久户| 亚洲精品乱码久久久久久按摩| 久久一本综合| 久久综合九色综合欧美就去吻| 亚洲色欲久久久综合网东京热| 国产成人久久久精品二区三区 | 久久精品人妻中文系列| 精品久久人人妻人人做精品| 久久66热人妻偷产精品9| 精品久久久久久国产| 国产午夜福利精品久久| 狠狠色丁香久久综合五月| 久久精品国产乱子伦| 久久频这里精品99香蕉久| 久久亚洲av无码精品浪潮| 99久久精品国产毛片| 99久久精品国产一区二区三区| 亚洲国产精品一区二区久久hs | 亚洲精品美女久久久久99小说| 99久久精品国产一区二区三区 | 中文字幕久久精品无码| 亚洲欧美久久久久9999| 欧美精品福利视频一区二区三区久久久精品 | 亚洲va中文字幕无码久久不卡 | 日本精品久久久久中文字幕| 精品久久久久久国产| 99精品久久久久中文字幕|