PKU 1065 貪心求值

來源:互聯網
上載者:User

貪心思想:局部最優從而達到整體最優

 

題意:t組測試資料,每組n塊木頭,每塊木頭有相應的length和weight。現在對n塊木頭進行處理,setup time如下定義:

1、處理第一塊木頭setup time為1

2、如果後來處理木頭的length和weight分別都不小於前一塊的length和weight,則不需要setup time,否則setup time加一

求處理全部木頭的最小setup.

 

分析:

1、首先對木頭進行非降排序,每個木頭的結構為(l,w),以length為主要元素,weight為次元素。

        (l1,w1)>(l2,w2)的條件是l1>l2 || (l1==l2 && w1>l2)

2、其次進行貪心選擇。初始計數器c=0, 每次從排序好的木頭前面選擇未使用過的木頭(l,w)做為當前木頭,然後標記已用,遍曆之後沒有用過的木頭(l1,w1),如果有(l1>=l&&w1>=w)則置(l1,w1)為已用並且替換當前木頭為(l1,w1)。每次遍曆之後計數器c加1,如果c等於總木頭數退出,否則跳到步驟2.

 

代碼:

#include <iostream><br />using namespace std;<br />const int N = 5000;<br />struct node{<br /> node& operator=(node &n){<br /> l=n.l, w=n.w, isUsed=n.isUsed;<br /> return *this;<br /> }<br /> bool operator>(node &n){<br /> return l>n.l || (l==n.l && w>n.w);<br /> }<br /> void swap(node &n){<br /> node tmp=*this;<br /> *this=n;<br /> n=tmp;<br /> }<br /> int l, w;<br /> bool isUsed;<br />}A[N];</p><p>int main()<br />{<br /> int t, n, i, j, k;</p><p> cin >> t;<br /> for(i=0;i<t;i++){<br /> //input<br /> cin >> n;<br /> for(j=0;j<n;j++){<br /> cin >> A[j].l >> A[j].w;<br /> A[j].isUsed=false;<br /> }<br /> //bubble sort<br /> for(j=1;j<n;j++)<br /> for(k=1;k<=n-j;k++)<br /> if(A[k-1] > A[k])<br /> A[k-1].swap(A[k]);<br /> //greedy<br /> node cur = A[0];<br /> A[0].isUsed=true;<br /> int c=0;<br /> while(true){<br /> for(j=1;j<n;j++) if(A[j].isUsed==false)<br /> if(A[j].l >= cur.l && A[j].w >= cur.w){<br /> A[j].isUsed=true;<br /> cur = A[j];<br /> }<br /> c++;<br /> for(j=1;j<n;j++) if(A[j].isUsed==false){<br /> cur = A[j];<br /> A[j].isUsed=true;<br /> break;<br /> }<br /> if(j==n) break;<br /> }<br /> cout << c << endl;<br /> }<br /> return 0;<br />}<br />

 

 

 

 

      

聯繫我們

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