poj 3111 K Best 二分搜索 最大化平均值
来源:互联网 发布:i5处理器编程够用么 编辑:程序博客网 时间:2024/05/23 12:54
Description
Demy has n jewels. Each of her jewels has some value vi and weight wi.
Since her husband John got broke after recent financial crises, Demy has decided to sell some jewels. She has decided that she would keep k best jewels for herself. She decided to keep such jewels that their specific value is as large as possible. That is, denote the specific value of some set of jewels S = {i1, i2, …, ik} as
.
Demy would like to select such k jewels that their specific value is maximal possible. Help her to do so.
Input
The first line of the input file contains n — the number of jewels Demy got, and k — the number of jewels she would like to keep (1 ≤ k ≤ n ≤ 100 000).
The following n lines contain two integer numbers each — vi and wi (0 ≤ vi ≤ 106, 1 ≤ wi ≤ 106, both the sum of all vi and the sum of all wi do not exceed 107).
Output
Output k numbers — the numbers of jewels Demy must keep. If there are several solutions, output any one.
Sample Input
3 21 11 21 3
Sample Output
1 2
Source
#include<cstdio>
#include <iostream>
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <cmath>
#include <vector>
#include <queue>
#include <algorithm>
#include <set>
using namespace std;
#define MM(a) memset(a,0,sizeof(a))
typedef long long LL;
typedef unsigned long long ULL;
const int mod = 1000000007;
const double eps = 1e-10;
const int inf = 0x3f3f3f3f;
int num[105];
struct Node{
int w,v,id;
double temp;
}node[100005];
bool cmp(Node a,Node b)
{
return a.temp>b.temp;
}
int n,k;
int ok(double x)
{
double sum=0;
for(int i=1;i<=n;i++)
node[i].temp=node[i].v-node[i].w*x;
sort(node+1,node+1+n,cmp);
for(int i=1;i<=k;i++)
sum+=node[i].temp;
return sum>=0;
}
int main()
{
while(~scanf("%d %d",&n,&k))
{
for(int i=1;i<=n;i++)
{
scanf("%d %d",&node[i].v,&node[i].w);
node[i].id=i;
}
double l=0,mid,r=1e6;
for(int i=1;i<=40;i++) //开成100次会超时,20次会wa,可能有poj服务器的问题
{
mid=l+(r-l)/2;
if(ok(mid))
l=mid;
else
r=mid;
}
for(int i=1;i<=k;i++)
printf("%d ",node[i].id);
printf("\n");
}
return 0;
}
- poj K Best 最大化平均值 二分搜索
- POJ 3111 K Best(二分搜索,最大化平均值)
- poj 3111 K Best 二分搜索 最大化平均值
- POJ 3111 K Best 【二分:最大化平均值】
- POJ 3111 K Best 二分 最大化平均值
- POJ 3111 K Best(二分——最大化平均值)
- poj 3111 K Best(二分-最大化平均值)
- POJ 3111 K Best 最大化平均值
- POJ 3111 K Best(最大化平均值)
- POJ 3111 K Best(最大化平均值)
- K Best(最大化平均值(二分搜索))
- POJ 3111 K Best &&NYOJ 914 (二分+ 贪心,最大化平均值)
- POJ3111 K Best 最大化平均值(二分)
- POJ3111 K Best(二分 最大化平均值)
- poj 3111 K Best && poj 2976(最大化平均值)
- POJ 3111 K Best <最大化平均,二分>
- POJ 3111 K Best 二分(最小化平均值)
- 最大化平均值---二分搜索
- Codeforces Round #329 (Div. 2) A. 2Char 字符串+暴力
- poj 3259 Wormholes 最短路bellman 题意转化很重要
- Spring配置之RMI
- poj 2456 Aggressive cows 整数二分写法 模板题
- poj 3104 Drying 二分搜索--查找最小yes值
- poj 3111 K Best 二分搜索 最大化平均值
- POj 3258 River Hopscotch 二分搜索 最大化最小值
- poj 2674 Linear world 弹性碰撞 升级的蚂蚁
- poj 2785 4 Values whose Sum is 0
- Codeforces Round #324 (Div. 2) A. Olesya and Rodion 构造数字 思维题
- Codeforces Round #324 (Div. 2) B. Kolya and Tanya 思维题 数论
- Poj 3977 Subset 折半枚举 超大背包
- poj 2549 Sumsets 折半枚举
- poj 3276 Face The Right Way 挑战150 反转