ZCMU1206之種樹問題

2021-08-21 20:29:31 字數 845 閱讀 7903

【once分析】 初步判別這道題是求最優化問題,那麼可以從動態規劃和貪心演算法這兩方面去思考。

【twice分析】這是乙個加了約束條件的貪心演算法,我們在加上了乙個位置的值後就不能再加上相鄰位置的值。而我們又無法判斷究竟是兩邊相加的大還是中間單個位置的大,這就需要乙個方法去解決。

【解決方案】1、首先我們確定我們存放這些資料的容器是乙個優先佇列,該佇列中的優先順序我們確定是從數字的從大到小;2、其次我們確定位置之間的相鄰關係,這個我們可以用pre[x]和next[x]去存放每個x的前乙個元素位置和後乙個元素位置,3、在m次迴圈中,我們每次將優先順序最高的元素取出,記為temp,然後把他的值加到ans中,然後給這個元素賦上新值,這個新值我們從存放位置的美觀的的陣列中去尋找(直接用索引找方便,如果在佇列中找他相鄰的位置的值很麻煩),a[temp.pos]=a[pre[temp.pos]]+a[next[temp.pos]]-a[temp.pos];這樣這個新值就是前乙個元素加後乙個元素減去當前元素的值了。我們再將這個元素的兩個相鄰元素種上士多啤梨,如果下一次從佇列中去除的是這兩個相鄰元素,那直接給刪了,如果取不到,那也無傷大雅。最後再將這個新元素加入到佇列中去。

下面給出**:

#include#include#includeusing namespace std;

int a[20000],pre[20000],next[20000];

struct node);

for(i=1;i<=m;i++));//把新元素插入佇列當中

} cout<

}}

ZCMU 2014 一生之敵(數學 列舉)

重新上傳 取消 第一行輸入乙個整數t,表示資料組數。每組資料輸入乙個整數n。1 t 100000 0 n 10 19 保證結果存在 輸出乙個整數。解析 數學題吧 由b 2 2 a a 1 2得 b a 1 根號下2a 令i 根號下2a,則a i i 2 b i i 2 1 i,接下來暴力列舉一下i就...

遞推之種蘿蔔

描述 一農夫挖了n個坑,準備種蘿蔔,n個坑排成一條直線,農夫認為如果連續m個坑都放入蘿蔔種子,那麼就會影響蘿蔔的生長,所以某些坑中就不能放蘿蔔種子。本題的任務是 對於給定的n和m,求不影響生長的種法的總數。輸入一行兩個正整數n和m,之間用空格隔開 0 n 64 0 m 5輸出一行乙個正整數,表示正確...

23種設計模式之開篇

常用的比較簡單的設計模式有 abstractfactory模式,composite模式,decorator模式,factory模式,observer模式,strategy模式和template模式。gof提出的設計模式,一共有23種,分為三大類 1.建立型模式 factory模式,abstractf...