[POJ 2976]Dropping tests(0-1分数规划)

[POJ 2976]Dropping tests(0-1分数规划)

大家好,又见面了,我是全栈君。

  1. 题目地址:http://poj.org/problem?

    id=2976

  2. 题目大意:给你n个物品的a值和b值,要你从中丢掉k个(或者说选择n-k个)物品,使得剩下的物品的[POJ 2976]Dropping tests(0-1分数规划)最大
  3. 题目思路(以下思路转自http://blog.csdn.net/neofung/article/details/7649603):

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

    [POJ 2976]Dropping tests(0-1分数规划)

    题目就变成了二分检索r

  4. 代码:

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #include <algorithm>
    #include <cmath>
    
    #define MAXN 1010
    #define EPS (1e-6)
    #define INF 0x3f3f3f3f
    
    using 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;
    }
    


版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/115619.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • 灾备测试_数据级灾备

    灾备测试_数据级灾备灾备测试

    2022年10月26日
  • java 卸载工具_java卸载工具下载

    java 卸载工具_java卸载工具下载java怎样完全卸载?怎么彻底删除java?有些用户的系统上会自带java程序,或者是因为安装了什么软件导致java一起安装了,那这个时候怎么将java卸载呢?不清楚的用户,看看小米小编为大家推荐的一款非常好用的java卸载工具。软件介绍java卸载器是一款java完全卸载工具,当你的java出现了故障需要卸载重装的话,就可以使用这个软件完全卸载掉java的所有文件,可以完美解决java卸载不了、…

  • WPF listview_wpf 数组

    WPF listview_wpf 数组网上很多方法,但是内容包含太全面,代码看上去很复杂,其实其中有很多是控制UI的在WPF中ListView的排序最基本的原理很简单就一句话ListViewControl.Items.SortDescriptions.Add(newSortDescription(“name”,ListSortDirection.Descending));就是这句,主要就是设置ListView的Items的SortDescriptions属性,这个属性是个集合,不同于我们熟悉的SQL或DataView的排序属性设置,SortD

  • java面试题及答案2020 大汇总

    java面试题及答案2020 大汇总java面试题及答案2020java面试题大汇总百度第一篇java面试题及答案2020先点赞后收藏,以后更新及时看文末后续更新答案,持续更新一面2018/9/11来自于牛客网1、手写ArrayList2、手写进制转换算法,求出一个数的二进制数1的个数3、JAVA基础,equals和==4、多线程方式、threadlocal,各种锁,synchronized和lock5、设计模式、spring类加载方式、实例保存在哪、aopioc、反射机制6、类加载器,双亲委派模

  • Python的缩进规则「建议收藏」

    Python中的缩进(Indentation)决定了代码的作用域范围。这一点和传统的c/c++有很大的不同(传统的c/c++使用花括号花括号{}符决定作用域的范围;python使用缩进空格来表示作用域的范围,相同缩进行的代码是处于同一范围)。每行代码中开头的空格数(whitespace)用于计算该行代码的缩进级别(Indentationlevel),注意一个Tab会被替换为1~8个Space(具体的空格数量,不同的编译器有不同的数量),缩进级别为0表示无缩进空格。在一个源文件不建议同时使用空格和制表缩

  • RJ45接口定义_rj45针脚顺序

    RJ45接口定义_rj45针脚顺序下面是[RJ45接口针脚定义(各种接口针脚定义)]的电路图RJ45接口信号定义,以及网线连接头信号安排以太网10/100Base-T接口:PinNameDescription1TX+TranceiveData+(发信号+)2TX-TranceiveData-(发信号-)3RX+ReceiveData+(收信号+)4n/cNotconnected(空脚)5…

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号