POJ 2976 3111(二分 最大化平均值)

2022-03-15 04:10:57 字數 1355 閱讀 5236

poj 2976

題意給n組資料ai,bi,定義累計平均值為:

現給出乙個整數k,要求從這n個數中去掉k個數後,最大累計平均值能有多大?(四捨五入到整數)

思路取n−k個數,使得累計平均值最大。

定義c(x)表示能否取得n−k個數,使得累計平均值≥x。然後二分搜尋最大的x。

可以這樣判斷可行性:

只需要從大到小選取n−k個(100⋅ai−x⋅bi)並求和sum,根據sum≥0來判斷(上述的s表示n−k個元素下標的集合)

#include #include #include #include using namespace std;

typedef long long ll;

int n, k;

ll a[1000 + 4], b[1000 + 4];

double c[1000 + 4];

bool c(double x)

void solve()

printf("%.f\n", floor(lb + 0.5)); // 四捨五入

}int main()

return 0;

}

poj 3111

題意給出n個珠寶的vi和wi,從中選出k個珠寶,使得

最大,求出這k個珠寶的序列。

思路同上,排序時需記錄序號。

#include #include #include #include using namespace std;

const double eps = 1e-6;

int n, k;

int v[100000 + 5], w[100000 + 5];

struct remian

} remain[100000 + 5];

bool c(double x)

sort(remain, remain + n);

double sum = 0.0;

for (int i = 0; i= 0;

}void solve()

for (int i = 0; i < k; ++i) printf(i == 0 ? "%d" : " %d", remain[i].id);

printf("\n");

}int main()

poj 2112 最大流 二分

題意 有k臺擠奶機,c頭奶牛,給出這k c個實體間的距離,求出每頭奶牛都到一台擠奶機去,怎麼分配使奶牛走的最大距離最小。用二分列舉最大距離,include include define n 500 define inf 0x3fffffff int map n n dis n gap n head ...

poj 2391 二分 最大流

思路 求最短時間,可以想到二分,然後判斷可行性。首先在原圖上求 floyd,得到每兩個棚之間的最短距離。然後拆點 將每個棚拆為 i 和 i 流進和流出 添邊 i,i inf 增加源點 s 和匯點 t,從 s 連邊到 i,容量為該棚現在的貓的數量,i 連邊到 t,容量為該棚的容量。若棚 i 和棚 j ...

poj 2455 二分 最大流

思路 求1 n的路徑中最長段的最小值,顯然要用到二分,我們二分最長段,如果當前u,v的距離小於等於limit,則連邊 雙向邊 邊容量為1,代表只能走1次。然後就是以1為源點,n為匯點跑最大流,如果maxflow t,則在 low,mid 中搜尋,否則就在 mid,high 中搜尋。1 include...