博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[POJ 2976]Dropping tests(0-1分数规划)
阅读量:6633 次
发布时间:2019-06-25

本文共 1029 字,大约阅读时间需要 3 分钟。

  1. 题目地址:

  2. 题目大意:给你n个物品的a值和b值,要你从中丢掉k个(或者说选择n-k个)物品,使得剩下的物品的最大
  3. 题目思路(以下思路转自):

    我们能够看看例如以下推导

    题目就变成了二分检索r

  4. 代码:

    #include 
    #include
    #include
    #include
    #include
    #define MAXN 1010#define EPS (1e-6)#define INF 0x3f3f3f3fusing namespace std;double w[MAXN],v[MAXN];int n,k;double value[MAXN];bool check(double x) //推断平均值x是否可取{ double sum=0; for(int i=1;i<=n;i++) value[i]=v[i]-x*w[i]; sort(value+1,value+n+1); //贪心排序,从大到小选取k个value[i],且这k个value的和必须不小于0 for(int i=n;i>=n-k+1;i--) sum+=value[i]; return sum>=0;}int main(){ while(scanf("%d%d",&n,&k)!=EOF&&!(n==0&&k==0)) { k=n-k; for(int i=1;i<=n;i++) scanf("%lf",&v[i]); for(int i=1;i<=n;i++) scanf("%lf",&w[i]); double lowerBound=0,upperBound=INF; //二分这个平均值 while(fabs(upperBound-lowerBound)>EPS) { double mid=(lowerBound+upperBound)/2; if(check(mid)) lowerBound=mid; else upperBound=mid; } printf("%.f\n",100*upperBound); } return 0;}



转载地址:http://iybvo.baihongyu.com/

你可能感兴趣的文章
Objective-C 内存管理
查看>>
Linux下rz,sz与ssh的配合使用
查看>>
pku 1054 The Troublesome Frog 暴力+剪枝
查看>>
串行,并行,并发
查看>>
linux NFS
查看>>
Jquery DataTable基本使用
查看>>
leetcode 674. Longest Continuous Increasing Subsequence
查看>>
Java中CAS详解
查看>>
Linux系统实战项目——sudo日志审计
查看>>
Android Application Task Activities的关系
查看>>
get app id
查看>>
[俗一下]世界500强公司的面试问题与答案提示 [转]
查看>>
使用 Excel Services ,结合 Analysis Services 在 SharePoint 中发布报表
查看>>
SQL Server数据导入导出技术概述与比较
查看>>
format的用法
查看>>
DHCPv6 server port and DHCPv6 client port
查看>>
BitmapFactory.Options避免 内存溢出 OutOfMemoryError的优化方法
查看>>
Python中通过Image的open之后,去show结果打不开bmp图片,无法正常显示图片
查看>>
DNGuard 免费的DotNet加密保护工具 V1.0
查看>>
编程中的命名设计
查看>>