POJ3111 K Best 二分 最大化平均值)

2021-07-10 19:30:16 字數 867 閱讀 3704

tle了好幾次的原因,快排對於已經有一定順序的數排得比較快,所以要在上次排好的基礎上,繼續下一次排序。還有就是不用每一次都把新的選擇儲存下來,最後直接輸出b[i].num就可以,因為100次迴圈以後,最後幾次前k個b[i].num就是正解。

一般而言,二分查詢的時候左開右閉或者左閉右開都是無所謂的,初始狀態中的l,r都不可能是最後答案。一般而言mid一定要能夠包括進閉合的那一邊。

#include#include#include#include#include#include#define n 100005

#define inf 0x3f3f3f3f

struct node

;double l, r, mid;

int n, k;

node b[n];

using namespace std;

bool cmp(node x, node y)

bool ok(double x)

sort(b, b+n, cmp);

double s = 0;

for (int i = 0; i < k; i++) s += b[i].vl;

if (s >= 0)

return true;

else return false;

}int main()

l = 0;

r = inf;

for (int i = 0; i < 100; i++)

for (int i = 0; i < k-1; i++) printf("%d ", b[i].num);

printf("%d\n", b[k-1].num);

}return 0;

}

POJ3111 K Best(分數規劃, 二分)

求選k對數,使得上述式子值最大。容易想到設左邊為乙個值,對式子變形以下,得到sigma v r w 0的時候就是最大的,是最小的。二分這個r就行了。1 include 2 include 3 include 4 include 5 include 6 include 7 include 8 incl...

POJ 3111 K Best 最大化平均值

題目鏈結 click here 題目大意 有n個物品的重量和價值各自是wi和vi。從中選出k個物品使得單位重量的價值最大,輸出物品的編號 解題思路 最大化平均值的經典.參見click here include include include include include include using...

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

題意 最大化平均值的模型 有 n個物品的重量和價值分別為wi和 vi,從中選取 k個物品使得單位重量的價值最大。也就是使得 k個物品的 vi wi 最大。使用二分搜尋解決這類問題 vi wi x 也就是 vi x wi 0 去找最大的可行解 x即可!x越大,式子左邊越小,一直逼到 0的邊界!本題屬於...