演算法 牛和牛欄如何匹配到最大值

2021-10-04 22:30:41 字數 1144 閱讀 4694

思路:

步驟一:1號牛選擇時,首先選1號牛欄;

步驟二:2號牛選擇時,發現1號牛欄已經被1號牛選擇,能否給1號牛找乙個新的位置?1號牛可以找到3;

故2號牛可選擇1;斷開舊的匹配,看是否能找到?

步驟三:按照步驟一和步驟二操作;

不過,程式設計的過程比較麻煩,如何儲存中間表量和利用呢?

首先肯定有結果陣列

int result = new int[n+1];

再就是狀態陣列;

int state = new int[n+1];0代表沒有搜尋過,1代表已經搜尋過;

遞迴演算法的本質:先執行層,再執行外層;

public int getmaxmatch(map> datas, int n) 

if (find(item, datas, result, state) == 1)

}return count;

}int find(int cow, map> datas, int result, int state) }}

return 0;

}

測試:

mapdata = new hashmap<>();

data.put(1, arrays.aslist(1,3,5));

data.put(2, arrays.aslist(1,4));

data.put(3, arrays.aslist(2, 5));

data.put(4, arrays.aslist(3, 4));

data.put(5, arrays.aslist(2, 4, 5));

system.out.println(new solve().getmaxmatch(data, 5));

map> data1 = new hashmap<>();

data1.put(1, arrays.aslist(2));

data1.put(2, arrays.aslist(2));

system.out.println(new solve().getmaxmatch(data1, 2));

結果:51

演算法需要認證思考細節,看著簡單,其實狀態為何這麼處理?需要思考清楚,相當於挪位置。正是遞迴的特點,先算裡層才能這麼幹。

求陣列中最大值和次最大值的較優演算法

先讓最大值為陣列首元素,然後用max和陣列的每乙個值進行比較,若小則交換,此時將max的舊值給次最大值submax。但如果陣列中最大值在遍歷前就已經找到,那麼submax將不再更新,所以在max值不更新的時候,要將submax與最近遍歷到的陣列與元素進行更新,以保證submax得到陣列中的次大值 如...

最大值和次大值問題的最優演算法

輸入 n個數,最壞情況下用 n logn 2 次比較找出當中的最大值和次大值。解題思想 根據題意出現 logn 則肯定用到二分或者堆的思路,但是輸入的數沒有經過排序,而且題目要求的計算量也不允許排序。這樣,就肯定會用到類似堆的思路,但是直接構造堆等同於排序。堆的思想跟競標賽類似,都是父節點 子節點。...

STL演算法 02最小值和最大值

min element b,e 返回乙個迭代器 min element b,e,op max element b,e max element b,e,op 第三個引數op可寫可不寫,max element 和min element 預設是從小到大排列,然後max element 輸出最後乙個值,mi...