poj3111K Best迭代法
来源:互联网 发布:电子琴知乎 编辑:程序博客网 时间:2024/04/28 15:13
题目链接:http: //poj.org/problem?id=3111
题意:给出n个珠宝,每个珠宝都有价值和重量两个属性,求在其中选k个珠宝使得 总价值/总重量 的值最大。
打印出珠宝的id (不用按顺序)。
设置 一个值来衡量每一个珠宝的“性价比”,f=价值-ans*重量;ans为k个的 总价值/总重量 的值。
用迭代逼近,一直找到ans相差不超过某一个精度的值。
题意:给出n个珠宝,每个珠宝都有价值和重量两个属性,求在其中选k个珠宝使得 总价值/总重量 的值最大。
打印出珠宝的id (不用按顺序)。
设置 一个值来衡量每一个珠宝的“性价比”,f=价值-ans*重量;ans为k个的 总价值/总重量 的值。
用迭代逼近,一直找到ans相差不超过某一个精度的值。
代码如下:
//#include<iostream>#include<cstdio>#include<math.h>#include<algorithm>#define eps 1e-3using namespace std;struct Node {double v, w, f;int id;} node[100020];int n, k;bool cmp(const Node &a, const Node &b) {return a.f > b.f;}int cmp2(const void *a, const void *b) {Node *aa = (Node*) a;Node *bb = (Node*) b;if (aa->f > bb->f)return -1;else if (aa->f < bb->f)return 1;return 0;}int main() {while (scanf("%d%d", &n, &k) != EOF) {int i;for (i = 0; i < n; i++) {scanf("%lf%lf", &node[i].v, &node[i].w);node[i].id = i + 1;}double res = 0, temp = 0.5;double sumv, sumw;while (fabs(temp - res) > eps) {res = temp;for (i = 0; i < n; i++)node[i].f = node[i].v - res * node[i].w; //sort(node, node + n, cmp);// qsort(node,n,sizeof(node[0]),cmp2);sumv = 0, sumw = 0;for (i = 0; i < k; i++) {sumv += node[i].v;sumw += node[i].w;}temp = sumv / sumw;}for (i = 0; i < k; i++) {if (i)printf(" ");printf("%d", node[i].id);}printf("\n");}return 0;}
- poj3111K Best迭代法
- poj 3111 K Best 参数搜索之牛顿迭代法
- 迭代法
- 迭代法
- 迭代法
- 迭代法
- 迭代法
- 迭代法
- 迭代法
- 迭代法
- 迭代法
- 迭代法
- 迭代法
- 迭代法
- 迭代法
- 迭代法
- 迭代法
- 迭代法解方程:牛顿迭代法、Jacobi迭代法
- hdu 1757 A Simple Math Problem 矩阵乘法解线性方程
- Android学习笔记————提高列表的流畅性
- 趣题8:最小长度珠子
- poj1681 Painter's Problem 高斯消元
- hdu3809 Decrypt coordinate 迭代法
- poj3111K Best迭代法
- SQL SEVER 概述 和 基础
- hdu3400 Line belt 三分法
- ADS1.2出现erro starting external process,Process error code 87(0x57)参数错误
- Irrlicht引擎源码剖析——第五天
- uva 624 CD (0-1背包打印路径)
- 信息熵
- 通过淘宝IP地址库获取IP位置
- 通过修改注册表优化win7性能