• <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++博客 :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
              36 隨筆 :: 0 文章 :: 25 評論 :: 0 Trackbacks
            http://acm.pku.edu.cn/JudgeOnline/problem?id=1185
            經典的狀態DP,做了好久才搞定。。。。
            先DFS處每行能放置的情況,并記錄下來,再用DP,狀態是二維的。

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

            那么ans[i][j][k]=MAX{ans[i-1][k][l]}+one[i][j]
                  {    l為枚舉第i-2行所選的狀態,且該狀態能ans[i][j][k]的狀態相容
                       one[i][j]表示第i行的j種狀態種1的個數   }
            最后的最大值即最終能放置的最多炮數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) 評論(5)  編輯 收藏 引用 所屬分類: acm

            評論

            # re: poj 1185 炮兵陣地 2009-05-17 13:55 young,bobby
            大哥 您的程序真的錯了 試試這組數據
            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 網上其它人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 還是我
            大哥 您的程序真的錯了 試試這組數據
            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 網上其它人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
            線段樹  回復  更多評論
              

            青青青国产成人久久111网站| 国内精品久久九九国产精品| 污污内射久久一区二区欧美日韩| 久久久国产一区二区三区| 色老头网站久久网| 久久综合给合久久狠狠狠97色69| 狠狠干狠狠久久| 精产国品久久一二三产区区别| www久久久天天com| 久久久久亚洲精品日久生情| 91久久精品国产成人久久| 亚洲中文字幕无码久久精品1| 91久久精品国产免费直播| 麻豆AV一区二区三区久久| 免费一级做a爰片久久毛片潮| 国产V亚洲V天堂无码久久久| 久久亚洲精品国产精品婷婷| 国产精品美女久久久免费| 久久精品中文无码资源站| 亚洲午夜无码久久久久小说| 久久久综合九色合综国产| 蜜臀av性久久久久蜜臀aⅴ | 九九久久精品国产| 久久精品国产亚洲AV大全| 色妞色综合久久夜夜| 国内精品久久久久久中文字幕| www.久久99| 国产精品久久久久9999高清| 久久夜色精品国产欧美乱| 亚洲中文久久精品无码ww16 | 久久免费看黄a级毛片| 香蕉aa三级久久毛片| 久久夜色精品国产亚洲av| 99久久国产综合精品网成人影院 | 天天爽天天爽天天片a久久网| 久久精品国产亚洲av高清漫画| 欧美丰满熟妇BBB久久久| 女人高潮久久久叫人喷水| 日韩美女18网站久久精品| 色婷婷噜噜久久国产精品12p| 一本色道久久综合狠狠躁篇|