二分 貪心 最小值最大化 牛牛分田地

2021-09-29 07:12:49 字數 1596 閱讀 7040

牛客網

牛牛和 15 個朋友來玩打土豪分田地的遊戲,牛牛決定讓你來分田地,地主的田地可以看成是乙個矩形,每個位置有乙個價值。分割田地的方法是橫豎各切三刀,分成 16 份,作為領導幹部,牛牛總是會選擇其中總價值最小的乙份田地, 作為牛牛最好的朋友,你希望牛牛取得的田地的價值和盡可能大,你知道這個值最大可以是多少嗎?

輸入描述:

每個輸入包含 1 個測試用例。每個測試用例的第一行包含兩個整數 n 和 m(1 <= n, m <= 75),表示田地的大小,接下來的 n 行,每行包含 m 個 0-9 之間的數字,表示每塊位置的價值。

輸出描述:

輸出一行表示牛牛所能取得的最大的價值。

示例輸入

4 43332

3233

3332

2323

示例輸出

2

這道題也是典型的最大值最小化,或最小值最大化問題。這裡是讓16塊田地中最小的值最大化。

依然使用二分+貪心的方法,每次嘗試乙個min_v,迴圈是while(l <= r),最後輸出l - 1

注意輸入是連著的,所以需要用char型別讀入,且為為了快速計算每一塊的面積,使用乙個pre_sum陣列記錄以每乙個位置為右下角的矩形的值。

讀入的田地資料如下:

0 0 0 0 0

0 3 3 3 2

0 3 2 3 3

0 3 3 3 2

0 2 3 2 3

計算出的pre_sum陣列如下:

0 0 0 0 0

0 3 6 9 11

0 6 11 17 22

0 9 17 26 33

0 11 22 33 43

#include

#include

#include

#include

// int_max

using

namespace std;

int rows, cols;

// 行、列

vectorint>> f;

// fields 田地

vectorint>> pre_sum;

// 為了快速計算每一塊的值

inline

intcalc

(int x1,

int y1,

int x2,

int y2)

intcandivide

(int min_v)}if

(cnt >=4)

return

true;}

return

false;}

intmain()

getchar()

;// 讀掉換行

}while

(l <= r)

cout << l -

1<< endl;

}

二分 最小值最大化

問題描述 記得上學那會,fbs同學經常會欺負蘿蔔同學。有一次,他出了這麼一道題目,想為難一下蘿蔔同學。題目是這樣的 有n個整數x i,x i值的範圍從0到1000000000。要從中選出c個數 2 c n 使得任意兩個數差的絕對值的最小值盡可能大,求這個最大值。由於資料太大,這次蘿蔔同學的確被難住了...

最大化最小值 二分

aggressive cows 題目意思 農民約翰有用c隻牛,然後他有n個隔間,每個隔間都有自己的座標位置 一維的 pos,如何安排把牛安排進隔間才能使,所有牛之間距離的最小值最大,我們不需要求這個分配方案,我們只需要求這個最小距離的最大值,很裸的最小值最大化。輸入 n 5m 3x 輸出 3 在位置...

poj2456(二分最大化最小值,貪心)

translation 有n間牛舍在一條直線上面,要住進c頭牛。求每頭牛之間的最大的最小距離能是多少?solution 二分最大化最小值,貪心 首先二分列舉最優解,其次就是判定該次最優解是否可行。這一步驟可以按照貪心法來判定。最後逐步縮小範圍。note date 2016.11.1 include ...