• <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 閱讀(2239) 評論(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
            線段樹  回復  更多評論
              

            久久99精品九九九久久婷婷| 国产精品久久久久久久久| 91久久九九无码成人网站| 久久国产乱子伦精品免费强| 久久精品国产秦先生| 久久久久噜噜噜亚洲熟女综合| 久久久久se色偷偷亚洲精品av | 久久久久亚洲AV无码专区体验| AAA级久久久精品无码片| 99久久无码一区人妻| 久久久久亚洲国产| 国产福利电影一区二区三区久久老子无码午夜伦不 | 色综合久久久久网| 人妻无码精品久久亚瑟影视| 国产精品美女久久久m| 亚洲伊人久久成综合人影院 | 久久久久黑人强伦姧人妻| 亚洲AV日韩精品久久久久久| 久久婷婷激情综合色综合俺也去| 精品久久久无码中文字幕| 亚洲AV日韩精品久久久久久久| 久久久久国产视频电影| 日韩精品久久久久久| …久久精品99久久香蕉国产 | 日本人妻丰满熟妇久久久久久| 久久综合精品国产一区二区三区| 久久99精品久久久久婷婷| 久久精品国产男包| 亚洲国产精品成人久久蜜臀 | 久久天天躁狠狠躁夜夜avapp| 久久综合九色欧美综合狠狠| 国产精品成人久久久久久久| 99久久无码一区人妻a黑| 91精品国产色综合久久| 久久天天躁狠狠躁夜夜96流白浆 | 亚洲精品国产综合久久一线| 久久播电影网| 久久强奷乱码老熟女网站| 午夜福利91久久福利| 亚洲国产日韩欧美综合久久| 人妻丰满?V无码久久不卡|