2017年12月10日訓練總結

來源:互聯網
上載者:User

這次訓練總結是12月8日到12月10日。

狀壓DP專題今天就結束了。目前是22/26,本來是打算做完24題的。。。看來是完不成了。今晚還準備把其中一道AC自動機+狀壓DP的題目做出來(看的資料裡有這道題),這道題的思路十分巧妙,把五維數組巧妙地壓縮成了二維,是另一種壓縮狀態的方法。具體的等做出來再說吧。。。

總結一下狀壓DP:

剛開始以為就是利用二進位壓縮狀態,01表示有無,後來發現它其實是一種方法,二進位壓縮只屬於其中的一種。不過二進位壓縮的確非常好用,也是巧妙地利用了位元運算。

解決的題目主要是狀態數比較少,但是無法開那麼大的數組的問題。

可以直接用幾重for迴圈完成狀態轉移,也可以利用dfs。但是用dfs做了放木塊的題目以後,幾乎再也沒遇到用dfs來狀態轉移的題目。而且自己做放1*3的木塊的時候還爆了一次記憶體。。。有些題目需要預先處理合法的狀態,有些題目需要先求出最短路,有的題目要用浮點數,有的題目需要求一個數二進位狀態所含1的數目,貼一段覺得比較不錯的代碼:

int fcount(int x)
{
 int s=0;
 while(x){
  s++;
  x&=(x-1);
 }
    return s;
}

有的題目需要控制精度,有的題目

另外,還學會了string可以直接加字母,學會了滾動數組i&1,學會了用異或^,這裡貼上刪迴文數刪到完那道題的狀態轉移的代碼:

for(i=0;i<m;i++)
        {
            for(k=(i+1)|i;k<m;k=(k+1)|i)//k狀態一定包含i狀態
            {
            if (b[k^i]&&dp[i]!=-1)//k^i 就是刪除的那個串
            {if (dp[k]<0)dp[k]=dp[i]+1;
            else dp[k]=min(dp[k],dp[i]+1);
            }
        }
    }

連連看的狀態比較奇特,用10個二進位位表示當前的位置到接下來連續10個水果的狀態,1為已經消除,0為未消除。然後二進位最後一位表示當前水果狀態,然後看看能不能刪到完。

另外,還有兩道期望dp(跑去看了資料,簡單的學習了下),兩道AC自動機+狀壓DP,目前只做出了一道,同時自己用這幾天的時間主攻了AC自動機,基本應用基本解決,再多做幾道題鞏固一下,寫幾道題解。

接下來這幾天主要做一些AC自動機的題目鞏固學習一下,下一個專題暫訂機率dp和期望dp,插頭dp看了一些資料沒怎麼看懂,可能看完AC自動機直接看尾碼數組。

另外,數位dp沒有白學,今天的比賽D題幾乎是數位DP專題中數字計數的原題。。。B題也很快做出來了,最坑的是A題讀錯題了。。沒做出來。。。懂題意後秒A。。。虧死了。。。讀題還是大問題。。。

加油。。。enjoy my ACM life。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.