在黑板上寫了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...