POJ 2976 Dropping tests 01分数规划 入门
来源:互联网 发布:从hive迁移到spark sql 编辑:程序博客网 时间:2024/06/06 18:13
题意:
有n个物品,每个物品有ai,bi两个属性。让你从n个里面,剔除k个,使得剩下的n-k个物品的
100*sum(a[i])/sum(b[i])最大。
思路:
比较基础的01分数规划。
假设answer为最终结果,answer >= 100*sum(a[i]*x[i])/sum(b[i]*x[i]),则有100*sum(a[i]*x[i]) - answer*sum(b[i]*x[i]) <= 0; x[i]:0或1
这样二分0~100即可找到answer。
不懂的话,可以去看我之前的这篇文章:http://blog.csdn.net/u011580493/article/details/41914891
*我以为是个背包,n^2 log100还是过了。其实根据二分的mid,把每个物品的值都求出来,从小到大sort之后选出n-k个即可。复杂度为(nlogn)log100
code:
#include <cstdio>#include <cmath>#include <cstring>#include <cstdlib>#include <iostream>#include <vector>#include <algorithm>using namespace std;typedef long long LL;const int MAXN = 1e3+5;int n, k;int a[MAXN], b[MAXN];double dp[MAXN];double sc[MAXN];void input(){ for(int i = 1;i <= n; i++) scanf("%d", &a[i]); for(int i = 1;i <= n; i++) scanf("%d", &b[i]);}bool check(double mid){ for(int i = 1;i <= n; i++) sc[i] = (double)a[i]*100 - mid*b[i]; sort(sc+1, sc+n+1); double sum = 0; for(int i = k+1;i <= n; i++) sum += sc[i]; return sum > 0;} void solve(){ double l = 0, r = 100; double res; while(r-l >= 1e-6) { double mid = (l+r)/2; if(check(mid)) { res = l; l = mid; } else r = mid; } printf("%.0f\n", res);}int main(){ while(scanf("%d%d", &n, &k) != EOF) { if(n == 0 && k == 0) break; input(); solve(); } return 0;}
0 0
- POJ 2976 Dropping tests 01分数规划 入门
- POJ-2976 Dropping tests(01分数规划入门)
- POJ 2976 Dropping tests 01分数规划
- POJ 2976 Dropping tests 01分数规划
- poj-2976-Dropping tests-01分数规划
- POJ 2976 Dropping tests 01分数规划
- 【POJ】2976 Dropping tests 01分数规划
- [poj 2976]Dropping tests 01分数规划
- POJ 2976 Dropping tests (01分数规划)
- POJ 2976 Dropping tests(01分数规划)
- POJ - 2976 Dropping tests 01分数规划
- POJ 2976 Dropping tests 01分数规划
- POJ 2976- Dropping tests -01分数规划
- POJ 2976 Dropping tests 01分数规划
- poj 2976 Dropping tests 01分数规划
- POJ-2976:Dropping tests【01分数规划】
- POJ 2976:Dropping tests 01 分数规划
- POJ 2976 Dropping tests (01分数规划)
- 立此存照(19)[C++]C++中的名称查找(name lookup)
- Spring在SSH中的作用
- nyoj-76 超级台阶
- DECAF PLATFORM 编译安装小结
- hihocoder 1079 离散化(线段树+区间离散化)
- POJ 2976 Dropping tests 01分数规划 入门
- C-----------------LessonScale
- man命令使用
- 我的博客Hello World
- java开发中常用插件二jcrop---jQuery 图像裁剪插件
- 用单词计数的代码演示Mapre获取命令行参数
- Netty之Google Protobuf编解码
- hibernate的原生 sql查询
- unity学习之Transform