[poj2976]Dropping tests(01分数规划,转化为二分解决或Dinkelbach算法)
题意:有n场考试,给出每场答对的题数a和这场一共有几道题b,求去掉k场考试后,公式
.的最大值
解题关键:01分数规划,double类型二分的写法(poj崩溃,未提交)
或者r-l<=1e-3(右边是精度)
为什么v-xw>=0?(v/x>=x?)
ans要求的是最大值,我们定义:c(x)可以选择使得单位重量的价值>=x,最大值一定满足此函数,此函数关于x单调递减,可以求得一个最大值。求得的x的最大值即是ans。
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cstdlib>
#include<iostream>
#include<cmath>
#define maxn 1006
#define eps 1e-8
#define inf 0x3f3f3f3f
using namespace std;
typedef long long ll;
int n,k;
double ans;
struct node{
double a,b;
}num[maxn];
bool cmp(const node &x,const node &y){
return x.a-x.b*ans>=y.a-y.b*ans;
}
bool check(double x){
ans=x;
sort(num+,num+n+,cmp);
double sum=;
for(int i=;i<=n-k;i++) sum+=num[i].a-x*num[i].b;
return sum>=-eps;
} double erfen(double l,double r){
while(r-l>eps){//for(int i=1;i<=100;i++)
double mid=(l+r)/;
if(check(mid)) l=mid;
else r=mid;
}
return r;
} int main(){
while(scanf("%d%d",&n,&k)!=EOF&&(n||k)){
for(int i=;i<=n;i++) scanf("%lf",&num[i].a);
for(int i=;i<=n;i++) scanf("%lf",&num[i].b);
double ans=erfen(,1.0*inf);
printf("%.0lf\n",*ans);//必须四舍五入
//printf("%d\n",(int)(100*ans+0.5));
}
return ;
}
2、Dinkelbach算法(原理上比二分更快,因为利用了当前直线所对应的解)
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cstdlib>
#include<iostream>
#include<cmath>
#define eps 1e-8
using namespace std;
typedef long long ll;
double a[],b[]; struct node{
double num;
int ord;
}d[]; bool cmp(node a,node b){
return a.num>b.num;
} int main(){
int n,k;
while(scanf("%d%d",&n,&k)&&(n||k)){
for(int i=;i<n;i++)scanf("%lf",&a[i]);
for(int i=;i<n;i++)scanf("%lf",&b[i]);
double l=0.0,ans;
while(){
ans=l;
for(int i=;i<n;i++){
d[i].num=a[i]-ans*b[i];
d[i].ord=i;
}
sort(d,d+n,cmp);
double p=0.0,q=0.0;
for(int i=;i<n-k;i++){
p+=a[d[i].ord];
q+=b[d[i].ord];
}
l=p/q;
if(fabs(ans-l)<eps)
break;
}
if(ans>)ans=;
if(ans<)ans=;
printf("%.0f\n",*ans);
}
return ;
}
[poj2976]Dropping tests(01分数规划,转化为二分解决或Dinkelbach算法)的更多相关文章
- POJ2976 Dropping tests —— 01分数规划 二分法
题目链接:http://poj.org/problem?id=2976 Dropping tests Time Limit: 1000MS Memory Limit: 65536K Total S ...
- POJ2976 Dropping tests(01分数规划)
题意 给你n次测试的得分情况b[i]代表第i次测试的总分,a[i]代表实际得分. 你可以取消k次测试,得剩下的测试中的分数为 问分数的最大值为多少. 题解 裸的01规划. 然后ans没有清0坑我半天. ...
- POJ2976 Dropping tests 01分数规划
裸题 看分析请戳这里:http://blog.csdn.net/hhaile/article/details/8883652 #include<stdio.h> #include<a ...
- Dropping tests(01分数规划)
Dropping tests Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 8176 Accepted: 2862 De ...
- POJ 2976 Dropping tests 01分数规划 模板
Dropping tests Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 6373 Accepted: 2198 ...
- POJ 2976 Dropping tests 01分数规划
给出n(n<=1000)个考试的成绩ai和满分bi,要求去掉k个考试成绩,使得剩下的∑ai/∑bi*100最大并输出. 典型的01分数规划 要使∑ai/∑bi最大,不妨设ans=∑ai/∑bi, ...
- $POJ$2976 $Dropping\ tests$ 01分数规划+贪心
正解:01分数规划 解题报告: 传送门! 板子题鸭,,, 显然考虑变成$a[i]-mid\cdot b[i]$,显然无脑贪心下得选出最大的$k$个然后判断是否大于0就好(,,,这么弱智真的算贪心嘛$T ...
- POJ - 2976 Dropping tests(01分数规划---二分(最大化平均值))
题意:有n组ai和bi,要求去掉k组,使下式值最大. 分析: 1.此题是典型的01分数规划. 01分数规划:给定两个数组,a[i]表示选取i的可以得到的价值,b[i]表示选取i的代价.x[i]=1代表 ...
- 【POJ2976】Dropping tests - 01分数规划
Description In a certain course, you take n tests. If you get ai out of bi questions correct on test ...
随机推荐
- WPF绑定数据源之RelativeSource
Command="{Binding ConfirmRegisterCommand}" CommandParameter="{Binding RelativeSource= ...
- Python — 多线程与多进程
1.多线程 线程是操作系统能够进行运算调度的最小单位.它被包含在进程之中,是进程中的实际运作单位,一个进程可以包含多个线程.一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线 ...
- java基础篇 -- 常用的日期加减和日期格式化工具类
平时我们遇到日期的加减,感觉是相当麻烦的,以下是常用的日志加减的方法,包括日的加减.月的加减等,也包括了一些常用的日期格式化,这样在我们以后碰到日期加减的时候会省去很多麻烦,欢迎大神指正和吐槽: pa ...
- hdu 1536/ hdu 1944 S-Nim(sg函数)
S-Nim Time Limit: 5000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submi ...
- substr 方法
substr 方法 返回一个从指定位置开始,并具有指定长度的子字符串. 参数 start 必选.所需的子字符串的起始位置.字符串中第一个字符的索引为 0. length 可选项.返回的子字符串中包含的 ...
- Python with 结构
一段基本的 with 表达式,其结构是这样的: with EXPR as VAR: BLOCK EXPR 可以是任意表达式: as VAR 是可选的.其一般的执行过程是这样的: 计算 EXPR ,并获 ...
- mysql索引攻略
本设计和优化专题转自博客园的Mysql的设计和优化专题 Explain优化查询检测 所谓索引就是为特定的mysql字段进行一些特定的算法排序,比如二叉树的算法和哈希算法,哈希算法是通过建立特征值,然后 ...
- layui.js框架的启发
最近做前台设计的MM,应用了layui.js框架,是一个可以按模块加载的js框架,可以实现UI上的一些效果,比如"手风琴折叠"面板.我看了下源码,抽出了其框架,应用到公司的项目中, ...
- Tomcat设计模式分析(转) 2
Tomcat 系统架构与设计模式,第 2 部分: 设计模式分析 这个分为两个部分的系列文章研究了 Apache Tomcat 服务器的系统架构以及其运用的很多经典设计模式.第 1 部分 分析了 Tom ...
- ECMAScript6入门-序言
本系列笔记基于阮一峰大佬的开源书籍.如果大家想看可以去该地址 本系列笔记只记录本人自己学习的过程,如果有侵权收到通知会自行下架. 如果大家看到可以直接去地址处学习,如果觉得好还望支持正版. 在此感谢阮 ...