---恢复内容开始--- POJ2976 Dropping tests 这个题就是大白P144页的一个变形,二分枚举x,对a[i]-x*b[i]从大到小进行排序,选取前n-k个判断和是否大于等于0,若满足条件,增大下限,否则,减小下限. 这个题因为精度问题wa了n次,后来干脆把a[i]和b[i]改成double就过了,循环终止条件写成while (abs(ub - lb) > 1e-4)比写成for(int i=0;i<100;i++)要好,既能减少时间消耗,又能满足精度. lb和ub初始化时…
题意:有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<…
题目链接:http://poj.org/problem?id=2976 Dropping tests Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 13615   Accepted: 4780 Description In a certain course, you take n tests. If you get ai out of bi questions correct on test i, your cumula…
poj2976 题意 给出 a b 数组,一共 n 对数,其中最多可以去掉 k 对,问怎样使剩下比率(原始比率是 $ \frac{\sum_{i=1}^{n} a}{\sum_{i=1}^{n} b}*100 $)最大. 分析 01分数规划 设 \(l=\frac{\sum a}{\sum b}\),我们要求使得 l 最大,构造新函数 \(F()={\sum a}-l*{\sum b}\),设\(D()=a-l*b\),显然 F() 是随 l 增大单调递减的,如果对于某个 l 使得 F() >…
传送门:>Here< 题意:给出长度相等的数组a和b,定义他们的和为$\dfrac{a_1+a_2+...+a_n}{b_1+b_2+...+b_n}$.现在可以舍弃k对元素(一对即$a[i]和b[i]$),问最大的和是多少? 解题思路 01分数规划入门题(并没有学过,看到hy大佬在刷因此也去学了下) 问题可以转化为数组中的每个元素选或不选,也就可以认为每一个元素都乘上一个$x[i], \ x[i] ∈ \{0, 1\}$ 因此问题可以转化为$ans = \dfrac{\sum\limits_…
题意 给你n次测试的得分情况b[i]代表第i次测试的总分,a[i]代表实际得分. 你可以取消k次测试,得剩下的测试中的分数为 问分数的最大值为多少. 题解 裸的01规划. 然后ans没有清0坑我半天. #include<iostream> #include<cstring> #include<cmath> #include<cstdio> #include<algorithm> using namespace std; ; double a[N]…
https://vjudge.net/problem/POJ-2976 又是一波c++AC,g++WA的题.. 先推导公式:由题意得 Σa[i]/Σb[i]<=x,二分求最大x.化简为Σ(a[i]-x*b[i])<=0,按a[i]-x*b[i]降序排列,从中取前n-m个和满足该式的话,就说明x多半是偏大了. #include<iostream> #include<cstdio> #include<queue> #include<cstring>…
题目大概说给n个二元组Ai和Bi,要去掉k个,求余下的100*∑Ai/∑Bi的最大值. 假设要的最大的值是ans,令Di=Ai-ans*∑Bi,对Di排序取最大的n-k个,如果∑Ai-ans*∑Bi>0,说明ans还可以更大,反之ans太大了,所以二分枚举一下ans判断即可. #include<cstdio> #include<cstring> #include<cmath> #include<algorithm> using namespace st…
裸题 看分析请戳这里:http://blog.csdn.net/hhaile/article/details/8883652 #include<stdio.h> #include<algorithm> using namespace std; ; ; int n,k; double a[N],b[N],c[N]; int main() { while(~scanf("%d%d",&n,&k)){ if(!n&&!k)break;…
传送门 题目大意:n个二元组a[i],b[i],去掉k个,求sigma a[i]/ sigma b[i]的最大值 代码: #include<iostream> #include<cstdio> #include<cstring> #include<algorithm> #define N 1009 #define LL long long using namespace std; LL n,k; LL a[N],b[N]; double c[N]; inli…