题目描述

Farmer John要带着他的N头奶牛,方便起见编号为1…N,到农业展览会上去,参加每年的达牛秀!他的第iii头奶牛重量为wi,才艺水平为ti​,两者都是整数。 在到达时,Farmer John就被今年达牛秀的新规则吓到了:

(一)参加比赛的一组奶牛必须总重量至少为W(这是为了确保是强大的队伍在比赛,而不仅是强大的某头奶牛),并且

(二)总才艺值与总重量的比值最大的一组获得胜利。

FJ注意到他的所有奶牛的总重量不小于W,所以他能够派出符合规则(一)的队伍。帮助他确定这样的队伍中能够达到的最佳的才艺与重量的比值。

题解

经典的0/1分数规划模型。

最大化ans=Σai*ti/Σai*wi (其中ai是0/1表示选不选)

套路的二分加判断。

简单推一下。

二分判断的本质是要找,是否存在和mid有关的一组解,从而来更新二分的范围。

假设mid<=ans的话,

那么,mid<=Σai*ti/Σai*wi

Σai*ti-Σai*wi*mid>=0

Σai*(ti-wi*mid)>=0

那么,判断就转化为了,是否存在一组ai,

满足ai*wi>=W,并且Σai*(ti-wi*mid)>=0

那么只要最大化这个式子,看是否大于等于0

0/1分数规划ai就是一个选择或者不选的问题。

每个牛有一个价值ti-wi*mid,重量wi,

所以0/1背包即可。

wi太大?

W很小,>W的话,直接放入W+1即可。

如果f[W],f[W+1]>=0的话,返回true反之false

注意0/1背包循环顺序(天啊)

代码:

#include<bits/stdc++.h>
using namespace std;
const int N=;
const int M=;
const double inf=19260817487525.00;
const int eps=0.0001;
int n,w0;
double ans;
double l,r;
double f[M];
int w[N],t[N];
double v[N];
bool che(double mid){
for(int i=;i<=n;i++){
v[i]=(double)t[i]-(double)w[i]*mid;
}
for(int i=;i<=w0+;i++)f[i]=-inf;f[]=0.00;
for(int i=;i<=n;i++){
for(int j=w0+;j>=;j--){
f[min(j+w[i],w0+)]=max(f[min(j+w[i],w0+)],f[j]+v[i]);
}
}
return (f[w0]>=eps||f[w0+]>=eps);
}
int main()
{
scanf("%d%d",&n,&w0);
for(int i=;i<=n;i++){
scanf("%d%d",&w[i],&t[i]);
r+=(double)t[i];
}
l=0.00;
while(r-l>0.0001){
double mid=(l+r)/2.0;
bool fl=che(mid);
if(fl) ans=mid,l=mid;
else r=mid;
}
//cout<<ans<<endl;
int op=ans*;
printf("%d",op);
return ;
}

总结:
1.0/1分数规划问题,关键点在于对二分的判断的模型构建。

必须要推判定mid<=ans(这个是最大化ans的情况)的条件(注意是判断存在性),配合每个物品选择或者不选择,构建模型。

2.对于>W的就认为是W+1的条件,是因为这只是要判定,>W都符合了,我们不关心到底是多少。

值得注意。

[USACO18OPEN]Talent Show的更多相关文章

  1. 分数规划模板(洛谷P4377 [USACO18OPEN]Talent Show)(分数规划,二分答案,背包)

    分数规划是这样一个东西: 给定若干元素,每个元素有两个属性值\(a_i,b_i\),在满足题目要求的某些限制下选择若干元素并求出\(\frac{\sum a}{\sum b}\)的最大值. 如果没有限 ...

  2. p4377 [USACO18OPEN]Talent Show

    传送门 分析 经典的01分数规划问题 用01背包check即可 代码 #include<iostream> #include<cstdio> #include<cstri ...

  3. 洛谷 P4377 [USACO18OPEN]Talent Show + 分数规划

    分数规划 分数规划可以用来处理有关分数即比值的有关问题. 而分数规划一般不单独设题,而是用来和dp,图论,网络流等算法结合在一起. 而基础的做法一般是通过二分. 二分题目我们都知道,需要求什么的最小或 ...

  4. 01分数规划初探?!By cellur925

    都要\(NOIp\)了为啥我还在看这种玄学玩意..... \(01\)分数规划:这是一个问题模型\(qwq\),一般是在求\[\frac{\sum_{i=1}^{n} a_i*x_i}{\sum_{i ...

  5. Backbone,Marionette,Talent学习笔记

    具体以源码为准 Talent继承自Marionette继承自BackBone Region: 继承自Backbone.Event,show(view)会调用view.render(),然后$el.ap ...

  6. 1062 Talent and Virtue (25)

    /* L (>=60), the lower bound of the qualified grades -- that is, only the ones whose grades of ta ...

  7. pat 1062. Talent and Virtue (25)

    难得的一次ac 题目意思直接,方法就是对virtue talent得分进行判断其归属类型,用0 1 2 3 4 表示 不合格 sage noblemen foolmen foolmen 再对序列进行排 ...

  8. PAT-B 1015. 德才论(同PAT 1062. Talent and Virtue)

    1. 在排序的过程中,注意边界的处理(小于.小于等于) 2. 对于B-level,这题是比較麻烦一些了. 源代码: #include <cstdio> #include <vecto ...

  9. 1062.Talent and Virtue

    About 900 years ago, a Chinese philosopher Sima Guang wrote a history book in which he talked about ...

随机推荐

  1. 用Solidity在Truffle上构建一个HelloWorld智能合约

    原文地址:石匠的blog Truffle的环境安装在前文已经整理,这次用Solidity在Truffle写一个HelloWorld以太坊智能合约,并在testrpc上进行测试.当前的软件版本信息如下: ...

  2. Python之并发编程-协程

    目录 一.介绍 二. yield.greenlet.gevent介绍 1.yield 2.greenlet 3.gevent 一.介绍 协程:是单线程下的并发,又称微线程,纤程.英文名Coroutin ...

  3. css3 transform属性多值的顺序问题

    对于transform属性的多值的顺序问题,我自己就被困扰过.后来知道了跟顺序有关,但是不知道为什么.我想应该很多人跟我以前一样,知其然不知其所以然.如果不知道的,也许这篇文章会对大家有所帮助. 先来 ...

  4. 读取classpath配置文件的方法

    http://www.cnblogs.com/sprinng/p/5622600.html

  5. 【Alpha发布】贡献分分配

    最后贡献分分配: (1211)王嘉豪:32 (1186)黄雨萌:36 (1182)佘彦廷:40 (1208)何小松:50 (1200)鲁聃:62 (1174)邢浩:64 (1193)刘乾:66

  6. python learning OOP1.py

    class Student(object): # 构造函数 # 第一个参数永远是 self 表示一个实例本身,但是传参的时候不需要传 # 在Python中,实例的变量名如果以__开头,就变成了一个私有 ...

  7. 关于javascript异步编程的理解

    在开发手机app的时候,要使用ajax想向后台发送数据.然后遇到了一个bug,通过这个bug,理解了ajax异步请求的工作原理.下面是登录页面的源代码. <!DOCTYPE html> & ...

  8. Week4-作业1:《构建之法》第四章、第十七章 阅读笔记与思考

    第四章 两人合作   这一章是讲述了两人结对编程的一些东西,包括一些代码的规范,还有结对编程的优点.怎么做.以及一些注意事项. 1.“错误处理 当程序的主要功能实现后,一些程序员会乐观地估计只需要另外 ...

  9. C语言中Union类型的使用方法

    转自:http://blog.csdn.net/feimor/article/details/6858103 使用C语言时,常常使用struct,对于union类型却几乎没有用过,只知道它是联合类型, ...

  10. 评论alpha发布以及PSP

    讲解顺序: 1.  俄罗斯方块   武志远 俄罗斯方块有自己新颖的玩法加在里面 ,可以进行游戏,界面友好但不美观,与传统玩法相比增加了经验值,这是一个很好的创意,游戏运行也很流畅,并找到两名同学现场体 ...