[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;
    }
    


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

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

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • linux怎么打包整个目录,tar打包整个目录(可排除子目录)几种方法[通俗易懂]

    linux怎么打包整个目录,tar打包整个目录(可排除子目录)几种方法[通俗易懂]这篇文章小编给大家分享一下linuxtar打包目录与有条件打包目录命令,想知道的小伙伴们赶快来看看吧!例1。压缩并打包目录代码如下复制代码tar-czfsmall.tar.gzsmall(目录名);例2。代码如下复制代码tarzcvfbackup.tar.gzsite/*–exclude=site/attach–exclude=site/images简单解释一下:ls-…

    2022年5月11日
    93
  • Intel x86 Emulator Accelerator(HAXM installer)无法安装「建议收藏」

    Intel x86 Emulator Accelerator(HAXM installer)无法安装「建议收藏」在sdkmanager中Intelx86EmulatorAccelerator(HAXMinstaller)后面显示NOTcompatiblewithwindows这个时候可以尝试手动安装Intelx86EmulatorAccelerator(HAXMinstaller)1、在网上下载后,https://software.intel.com/en-us/artic…

    2022年6月28日
    37
  • 神经网络学习–用卷积神经网络进行图像识别「建议收藏」

    神经网络学习–用卷积神经网络进行图像识别「建议收藏」卷积神经网络特别适合处理像图片、视频、音频、语言文字等,这些与相互位置有一定关系的数据。卷积神经网络(ConvolutionalNerualNetwork,CNN)为什么计算机可以处理图片–因为在计算机语言中图片可以用数字化,用四维数组来表示既然卷积神经网络可以处理图片,那么我们就要理解图片在计算机语言中是如何表达的。图片其实是“点阵”图,由一个个点按照一定的顺序组合而成,那我们就可以联想到一个概念–数组。图片可以分为三类:纯黑白图片、灰度图片、彩色图片关于图片数字化,以最.

    2022年6月1日
    37
  • 行为动作识别

    行为动作识别随着计算机学科与人工智能的发展和应用,视频分析技术迅速兴起并得到了广泛关注。视频分析中的一个核心就是人体行为识别,行为识别的准确性和快速性将直接影响视频分析系统后续工作的结果。因此,如何提高视频中人体行为识别的准确性和快速性,已成为视频分析系统研究中的重点问题。目前,典型的视频人体行为识别方法主要有:时空兴趣点、密集轨迹等。其中:时空兴趣点,是通过检测视频中的角点、提取角点的特征进行人体行…

    2022年6月21日
    39
  • Linux 5nd Day

    Linux 5nd Day

    2021年8月7日
    50
  • php 5.0 与7.0有什么区别

    php 5.0 与7.0有什么区别

    2021年9月25日
    36

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

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