POJ 3111 K Best (最大化平均值,贪心 二分)难度⭐⭐⭐

题目来源:
【题意】
有n个物品的重量和价值分别是wi,vi,从中选取k个物品使得单位重量的价值最大。
输出格式:
输出一行物品的编号。

#include<iostream>
#include<stdio.h>
#include<algorithm>
#define ls (p<<1)
#define rs (p<<1|1)
#define mid (l+r)/2
using namespace std;
typedef long long ll;
const ll N=1e5+7;
const double mod=2147483647.0;
const double EPS=1e-6;
ll n,k;
double f[N];
#undef mid
struct node
{
    double v,w,av;
    ll id;
    bool operator<(const node &t)const
    {
        return av>t.av;
    }
}arr[N];
inline bool check(double x)
{
    for(int i=1;i<=n;++i)
        arr[i].av=arr[i].v-arr[i].w*x;
    sort(arr+1,arr+1+n);
    double sum=0;
    for(int i=1;i<=k;++i)
        sum+=arr[i].av;
    return sum>=0;
}
void solve()
{
    double l=0,r=mod;
    while(l+EPS<=r)
    {
        double mid=(l+r)/2;
        if(check(mid))
            l=mid;
        else r=mid;
    }
}
int main()
{
    while(~scanf("%lld %lld",&n,&k))
    {
        for(ll i=1;i<=n;++i)
        {
            scanf("%lf %lf",&arr[i].v,&arr[i].w);
            arr[i].id=i;
        }
        solve();
        for(ll i=1;i<=k;++i)
            printf("%lld%s",arr[i].id,i==k?"\n":" ");
    }
    return 0;
}

有任何疑问欢迎评论哦虽然我真的很菜

全部评论

相关推荐

06-12 16:50
已编辑
小米_软件开发(准入职员工)
晓沐咕咕咕:评论区没被女朋友好好对待过的计小将可真多。觉得可惜可以理解,毕竟一线大厂sp。但是骂楼主糊涂的大可不必,说什么会被社会毒打更是丢人。女朋友体制内生活有保障,读研女朋友还供着,都准备订婚了人家两情相悦,二线本地以后两口子日子美滋滋,哪轮到你一个一线城市房子都买不起的996清高计小将在这说人家傻😅
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务