POJ - 3111 K Best 平均值最大(01分数规划)
2015-05-12 17:38
141 查看
题目大意:有n颗珍珠,每颗珍珠有相应的价值和代价,要从中挑出K颗珍珠,使得(这k颗珍珠的总价值/这k颗珍珠的代价 )达到最大
解题思路:平均值最大,要注意精度
给出01分数规划的详细解读
< http://www.cnblogs.com/perseawe/archive/2012/05/03/01fsgh.html>
解题思路:平均值最大,要注意精度
给出01分数规划的详细解读
< http://www.cnblogs.com/perseawe/archive/2012/05/03/01fsgh.html>
[code]#include<cstdio> #include<algorithm> #include<cstring> using namespace std; #define maxn 100010 int n, k, ans[maxn]; double Sum; struct jewels { double v, w, d; int id; }J[maxn]; bool cmp(const jewels a, const jewels b) { return a.d > b.d; } bool judge(double mid) { for(int i = 0; i < n; i++) J[i].d = J[i].v - mid * J[i].w; sort(J, J + n, cmp); double t = 0.0; for(int i = 0; i < k; i++) t += J[i].d; return t >= 0; } void solve() { double l = 0, r = 1e7 + 1; while(r - l > 1e-6) { double mid = (l + r) / 2; if(judge(mid)) l = mid; else r = mid; } } int main() { while(scanf("%d%d", &n, &k) != EOF) { for(int i = 0; i < n; i++) { scanf("%lf%lf", &J[i].v, &J[i].w); J[i].id = i + 1; } solve(); printf("%d", J[0].id); for(int i = 1; i < k; i++) printf(" %d", J[i].id); printf("\n"); } return 0; }
相关文章推荐
- poj 3111 K Best (二分搜索之最大化平均值之01分数规划)
- K Best poj 3111 (01分数规划---二分搜索)
- POJ 3111 K Best (01分数规划+二分)
- POJ - 3111 K Best (二分 + 01分数规划)
- poj3111- POJ - 3111 K Best (二分 + 01分数规划)
- poj 2976 Dropping tests (二分搜索之最大化平均值之01分数规划)
- poj 3155 Hard Life(最大密度子图,01分数规划)
- poj 3111 K Best 【0-1分数规划】 【二分 or Dinkelbach迭代】
- POJ 2976,3111 01分数规划
- POJ 3111 - K Best(0/1分数规划)
- 最大密集子图(01分数规划+二分+最小割)POJ3155
- 最大密集子图(01分数规划+二分+最小割)POJ3155
- POJ 3621 Sightseeing Cows 最大密度环 01分数规划
- POJ-3155-Hard Life(最大密度子图)(01分数规划+最小割)
- poj 3155 Hard Life(01分数规划+最大流--最大密度子图)
- POJ_P2976 Dropping tests(01分数规划)
- POJ 3111 K Best(最大化平均值)
- poj 2976 Dropping tests 01分数规划
- POJ 2976 01分数规划基础题目
- 【POJ】2728 Desert King 最优比率生成树——01分数规划【经典】