NOIP 2006 解題報告

來源:互聯網
上載者:User

標籤:style   os   資料   ar   問題   工作   時間   演算法   

第一題:

在Mars星球上,每個Mars人都隨身佩帶著一串能量項鏈。在項鏈上有N顆能量珠。能量珠是一顆有頭標記與尾標記的珠子,這些標記對應著某個正整數。並且,對於相鄰的兩顆珠子,前一顆珠子的尾標記一定等於後一顆珠子的頭標記。因為只有這樣,通過吸盤(吸盤是Mars人吸收能量的一種器官)的作用,這兩顆珠子才能彙總成一顆珠子,同時釋放出可以被吸盤吸收的能量。如果前一顆能量珠的頭標記為m,尾標記為r,後一顆能量珠的頭標記為r,尾標記為n,則彙總後釋放的能量為(Mars單位),新產生的珠子的頭標記為m,尾標記為n。

需要時,Mars人就用吸盤夾住相鄰的兩顆珠子,通過彙總得到能量,直到項鏈上只剩下一顆珠子為止。顯然,不同的彙總順序得到的總能量是不同的,請你設計一個彙總順序,使一串項鏈釋放出的總能量最大。

例如:設N=4,4顆珠子的頭標記與尾標記依次為(2,3) (3,5) (5,10) (10,2)。我們用記號⊕表示兩顆珠子的彙總操作,(j⊕k)表示第j,k兩顆珠子彙總後所釋放的能量。則第4、1兩顆珠子彙總後釋放的能量為: (4⊕1)=10*2*3=60。 這一串項鏈可以得到最優值的一個彙總順序所釋放的總能量為 ((4⊕1)⊕2)⊕3)=10*2*3+10*3*5+10*5*10=710。 

求彙總能釋放的最大總能量 。

 

 

解題過程: 1.石子合并的變形,處理方法可以參照USACO Broken Chain的方法,把環斷開成鏈,然後複製一遍,這樣處理起來方便很多。 2.F[i][j] 表示從第i個開始一共j個珠子合并得到的最大總能量,枚舉中間點(最後一次合并的2個珠子)即可轉移。 3.易錯點:別忘了要寫F[i+n][j]=F[i][j],不要以為

 F[i+n][j]用不到,其實不然。比如n=4,F[3][4]是要用到F[5][2]的;如果忘記寫,只能拿20分。

 

 

 第二題:

 金明的預算方案,老題目了,分5種狀態轉移就好,由於錢是10的倍數,描述狀態的時候除以一個10.否則空間會不夠。

 

 

第三題:

我們現在要利用m台機器加工n個工件,每個工件都有m道工序,每道工序都在不同的指定的機器上完成。每個工件的每道工序都有指定的加工時間。 每個工件的每個工序稱為一個操作,我們用記號j-k表示一個操作,其中j為1到n中的某個數字,為工件號;k為1到m中的某個數字,為工序號,例如2-4表示第2個工件第4道工序的這個操作。在本題中,我們還給定對於各操作的一個安排順序。 例如,當n=3,m=2時,“1-1,1-2,2-1,3-1,3-2,2-2”就是一個給定的安排順序,即先安排第1個工件的第1個工序,再安排第1個工件的第2個工序,然後再安排第2個工件的第1個工序,等等。 一方面,每個操作的安排都要滿足以下的兩個約束條件。 (1) 對同一個工件,每道工序必須在它前面的工序完成後才能開始; (2) 同一時刻每一台機器至多隻能加工一個工件。 另一方面,在安排後面的操作時,不能改動前面已安排的操作的工作狀態。 由於同一工件都是按工序的順序安排的,因此,只按原順序給出工件號,仍可得到同樣的安排順序,於是,在輸入資料中,我們將這個安排順序簡寫為“1 1 2 3 3 2”。 還要注意,“安排順序”只要求按照給定的順序安排每個操作。不一定是各機器上的實際操作順序。在具體實施時,有可能排在後面的某個操作比前面的某個操作先完成。 例如,取n=3,m=2,已知資料如下:

工件號 機器號/加工時間
工序1 工序2
1 1/3 2/2
2 1/2 2/5
3 2/2 1/4

則對於安排順序“1 1 2 3 3 2”,中的兩個實施方案都是正確的。但所需要的總時間分別是10與12。

 

當一個操作插入到某台機器的某個空檔時(機器上最後的尚未安排操作的部分也可以看作一個空檔),可以靠前插入,也可以靠後或置中插入。為了使問題簡單一些,我們約定:在保證約束條件(1)(2)的條件下,盡量靠前插入。並且,我們還約定,如果有多個空檔可以插入,就在保證約束條件(1)(2)的條件下,插入到最前面的一個空檔。於是,在這些約定下,上例中的方案一是正確的,而方案二是不正確的。 顯然,在這些約定下,對於給定的安排順序,符合該安排順序的實施方案是唯一的,請你計算出該方案完成全部任務所需的總時間。 

 

 

解題過程:

1.實在不清楚這題考的是什麼。演算法都告訴你了,直接類比。題目要多看幾遍,搞了半天才看懂題目。 2.儲存m個機器的各個空檔的起始位置和寬度,從前往後找到第一個符合要求的插入即可,同時修改各個空擋的資訊,我是用O(n)的時間直接讓數組往後移一位 ,如果要追求完美,用鏈表O(1)的時間,但是寫起來也麻煩。 

 

第四題:

設r是個2^k 進位數,並滿足以下條件: (1)r至少是個2位的2^k 進位數。 (2)作為2^k 進位數,除最後一位外,r的每一位嚴格小於它右邊相鄰的那一位。 (3)將r轉換為2進位數q後,則q的總位元不超過w。 在這裡,正整數k(1≤k≤9)和w(k<w≤30000)是事先給定的。 問:滿足上述條件的不同的r共有多少個? 我們再從另一角度作些解釋:設S是長度為w 的01字串(即字串S由w個“0”或“1”組成),S對應於上述條件(3)中的q。將S從右起劃分為若干個長度為k 的段,每段對應一位2^k進位的數,如果S至少可分成2段,則S所對應的位元又可以轉換為上述的2^k 進位數r。 例:設k=3,w=7。則r是個八位元(2^3=8)。由於w=7,長度為7的01字串按3位一段分,可分為3段(即1,3,3,左邊第一段只有一個二進位位),則滿足條件的八位元有: 2位元:高位為1:6個(即12,13,14,15,16,17),高位為2:5個,…,高位為6:1個(即67)。共6+5+…+1=21個。 3位元:高位只能是1,第2位為2:5個(即123,124,125,126,127),第2位為3:4個,…,第2位為6:1個(即167)。共5+4+…+1=15個。 所以,滿足要求的r共有36個。答案不超過200位


解題過程:

想到2種方法,不過第二種容易寫一些。 首先分析一下資料範圍,w<=30000,k<=9,r最長長度為2^9-1=511,因此w最大為511*9=4500,因此w最大在4500左右,如果更大,多出的長度只能都是0,不必管。
方法一(動態規劃): F[i][j]表示以不小於i的數字打頭且長度為j的遞增序列有多少個,(所有數字都是1~2^k-1)。 狀態轉移方程: F[i][j]=F[i+1][j](不用i打頭的情況)+F[i+1][j-1](用i打頭的情況); 特別地,當i+j=2^k的時候F=1; 當j=1的時候,F=2^k-i; 1.i,j最大都能達到511,然後儲存200位高精度的數字,一共要500*500*200+=5000w,空間明顯不夠,不過資料貌似沒那麼噁心,儲存100位高精度數字貌似也可以過,空間剛好夠。。正解是用滾動數組。 2.如何根據F數組求解答案?首先是分2種情況。令p=w/k,q=2^k-1,m=w%k,c=2^m-1; A.轉換成2進位時,除了有p段,前面還有m個0或1,也就是說r(2^k進位下)的最左邊一位s是1~c的時候,有sum(F[s][p+1])種情況。 B.r最多有p段的時候,枚舉段數s,答案就是sum(F[1][s]); 合并起來就是答案,用滾動數組的時候,因為j=p+1是固定的,所以讓j滾起來用。也就是用F[i]表示F[i][p+1];一開始做到這裡我就傻掉了,因為求情況B的時候,sum(F[1][s])沒法求了。。頭暈,睡了一覺後就轉到第二種方法去寫了。。結果寫第二種方法的時候也碰到這種情況,(對滾動數組理解不夠深刻啊。),想到瞭解決方法。這裡其實dp的時候順便用一個數組把所有F[1][j]儲存下來就ok了。
方法二(組合數學): 組合數的求法就不說了,關鍵是如何利用組合數求ans。 情況也是上面一樣AB兩種。 A.比如最左邊是2的時候,那麼右邊還有p段,也就是說在3~q裡取p個數排成遞增的隊列,也就是在q-2個數裡取p個數,方案數就是C(q-2,p);所以枚舉最左邊的數加起來就好。 B.同樣也是枚舉段數s,答案就是在q個數裡取s個數,就是C(q,s);
演算法不難想到,難的是高精度的處理和滾動數組的最佳化。 另外在高精度輸出答案的時候,如果答案是0,別忘了輸出,因為一般都是pos=200,while(a[pos]==0)pos--,如果全是0的話就沒輸出了。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.