2017級演算法模擬上機準備篇 貪心 初階

2022-08-19 12:15:09 字數 2378 閱讀 3412

在黑板上寫了n個正整數做成的乙個數列,進行如下操作:

每一次擦去其中的兩個數a和b,然後在數列中加入乙個數a×b+1,如此下去直至黑板上剩下乙個數。

在所有按這種操作方式最後得到的數中,最大的max,最小的為min,則該數列的極差定義為m=max-min。

這道題是用優先佇列輔助實現貪心問題的一道典型題。

貪心和優先佇列為什麼能有不解之緣? 其實仔細思考一下就會明白

開兩個優先佇列,每次取最小的兩個操作一下把結果放進去,最後剩下就是max。每次取最大的兩個操作一下把結果放進去,最後剩下的就是min。

什麼?你要我證明。

那就來好了。

假設經(n-3)次變換後得到3個數:a,b,max』(max』≥a≥b),其中max』是(n-2)個數經(n-3)次變換後所得的最大值,此時有兩種求值方式,設其所求值分別為x、y 則有:x=(a×b+1)×max』+1,y=(a×max』+1)×b+1。所以x-y=max』-b≥0若經(n-2)次變換後所得的3個數為:b(m≥a≥b)且m不為(n-2)次變換後的最大值,即m<max』則此時所求得的最大值為:=(a×b+1)×m+1 此時 - =(1+ab)(max』-m)>0 所以此時不為最優解。

所以若使第k(1≤k≤n-1)次變換後所得值最大,必使(k-1)次變換後所得值最大(符合貪心策略的特點2),在進行第k次變換時,只需取在進行(k-1)次變換後所得數列中的兩最小數p,q施加f操作:p←p×q+1,q←∞即可,因此此題可用貪心策略求解。討論完畢。

在求min時,我們只需在每次變換的數列中找到兩個最大數p,q進行變換:p←p×q+1,q←-∞即可。原理同上。

#include #include 

#include

#include

using

namespace

std;

const

int maxlen=25

;int

ar[maxlen];

intmain()

while(p.size() >=2

) max=p.top();

while(q.size() >=2

) min=q.top();

printf(

"%d\n

",max-min);

}return0;

}

這道題,其實也是一道貪心+sort+優先佇列的題。

我們可以設定乙個curtime來作為乙個掃瞄的指標,對於每門課程,如果可以學習的話( curtime + last_time) <= ddl 那麼就學習,否則的話,就用之前的最長時間的課程替換掉?為什麼要替換其實就體現了貪心的思想,在同樣的課程含量下,curtime越小那麼。我們選擇的餘地就會越大。(區域性最優解推導出全域性最優解)

#include #include 

#include

#include

using

namespace

std;

typedef

struct

mooccourse;

//優先佇列的使用

const

int maxlen=1e5 + 10

;course ar[maxlen];

bool

cmp(course a,course b)

intmain()

else ans++;

}printf(

"%d\n

",q.size());

}return0;

}

貪心+優先佇列輔助實現

毒素多的應該盡早解決,故使用優先佇列模擬即可。

#include #include 

#include

#include

using

namespace

std;

const

int maxlen=1e5 + 10

;int

ar[maxlen];

intmain()

scanf("%d

",&k);

t=0;

while(q.size() > 0

)

for(i=1;i<=j;i++)

if(ar[i]>0

) q.push(ar[i]);

if(num>0

) q.push(num);

t++;

}printf(

"%d\n

",t);

}return0;

}

北航2017級演算法第一次上機 位元手鍊

位元手鍊 乙個類似於腦筋急轉彎的題目,考查模擬,貪心等知識點。通過模擬題中給出的三個操作我們可以得到一下幾個結論 如果a i a j a i a j a i a j 那麼三個操作都無效,維持原狀 操作相當於把1變為0 操作相當於把0變為1 操作i相當於交換 由以上結論我們不難得出,優先使用 一次性解...

2017級北航演算法軟院第一次演算法上機 位元手鍊

關於北航oj的個人github位址 時間限制 1000ms 記憶體限制 65536kb oj編號 1413 通過率 14 28 50.00 正確率 14 79 17.72 題目描述 葉姐要想哥贈送一串位元手鍊,這個手鍊由0和1組成。想哥買了手鍊b,無意間得知葉姐想要同樣長度的手鍊a。想哥囊中羞澀,只...

cpu優先順序排程演算法和時間片演算法模擬程式

system shedule algorithm include the priority first algorithm and the time slice algorithm version 2.0 author chillycreator include include include us...