NYIST 914 Yougth的最大化

Yougth的最大化
时间限制:1000 ms | 内存限制:65535 KB
难度:4

描述

Yougth现在有n个物品的重量和价值分别是Wi和Vi,你能帮他从中选出k个物品使得单位重量的价值最大吗?

输入

有多组测试数据,每组测试数据第一行有两个数n和k,接下来一行有n个数Wi和Vi。(1<=k=n<=10000) (1<=Wi,Vi<=1000000)

输出
输出使得单位价值的最大值。(保留两位小数)

样例输入
3 2
2 2
5 3
2 1

样例输出
0.75

来源
Yougth

上传者
TC_杨闯亮

解题:01分数规划

 1 #include <iostream>
 2 #include <cstdio>
 3 #include <cstring>
 4 #include <string>
 5 #include <cstdlib>
 6 #include <climits>
 7 #include <vector>
 8 #include <algorithm>
 9 #include <cmath>
10 #include <sstream>
11 using namespace std;
12 const double exps = 1e-3;
13 struct xyz {
14     int w,v;
15     double c;
16 } p[10010];
17 inline bool cmp(const xyz &a,const xyz &b) {
18     return a.c > b.c;
19 }
20 double ans(double t,const int &n,const int &k) {
21     int i,a = 0,b = 0;
22     double q = 0.0;
23     for(i = 0; i < n; i++)
24         p[i].c = p[i].v - t*p[i].w;
25     sort(p,p+n,cmp);
26     for(i = 0; i < k; i++) {
27         a += p[i].v;
28         b += p[i].w;
29     }
30     q = a*1.0/b;
31     if(fabs(q-t) < exps) return q;
32     return ans(q,n,k);
33 }
34 int main() {
35     int n,k,i;
36     while(~scanf("%d %d",&n,&k)) {
37         for(i = 0; i < n; i++)
38             scanf("%d %d",&p[i].w,&p[i].v);
39         printf("%.2f\n",ans(0.5,n,k));
40     }
41     return 0;
42 }

时间: 2024-08-02 10:40:10

NYIST 914 Yougth的最大化的相关文章

NYOJ 914 Yougth的最大化

Yougth的最大化 时间限制:1000 ms  |  内存限制:65535 KB 难度:4 描述 Yougth现在有n个物品的重量和价值分别是Wi和Vi,你能帮他从中选出k个物品使得单位重量的价值最大吗? 输入 有多组测试数据 每组测试数据第一行有两个数n和k,接下来一行有n个数Wi和Vi. (1<=k=n<=10000) (1<=Wi,Vi<=1000000) 输出 输出使得单位价值的最大值.(保留两位小数) 样例输入 3 2 2 2 5 3 2 1 样例输出 0.75 分析:

NYOJ 914 Yougth的最大化 【贪心】+【二分】

Yougth的最大化 时间限制:1000 ms  |  内存限制:65535 KB 难度:4 描述 Yougth现在有n个物品的重量和价值分别是Wi和Vi,你能帮他从中选出k个物品使得单位重量的价值最大吗? 输入 有多组测试数据 每组测试数据第一行有两个数n和k,接下来一行有n个数Wi和Vi. (1<=k=n<=10000) (1<=Wi,Vi<=1000000) 输出 输出使得单位价值的最大值.(保留两位小数) 样例输入 3 2 2 2 5 3 2 1 样例输出 0.75 思路:

NYOJ Yougth的最大化

http://acm.nyist.net/JudgeOnline/problem.php?pid=914 Yougth的最大化 时间限制:1000 ms  |  内存限制:65535 KB 难度:4 描述 Yougth现在有n个物品的重量和价值分别是Wi和Vi,你能帮他从中选出k个物品使得单位重量的价值最大吗? 输入 有多组测试数据 每组测试数据第一行有两个数n和k,接下来一行有n个数Wi和Vi. (1<=k=n<=10000) (1<=Wi,Vi<=1000000) 输出 输出使

二分搜索(2、Yougth的最大化,无限逼近最大值)

条件C(x):=可以选择是单位重量的价值不小于x,则该问题就变成了满足C(x)的最大的x,那么怎么判断C(x)是否可行呢?假设我们选了某个物品的集合S,那么它们的单位重量价值是: 因此就变成了判断是否存在s满足下面条件: 把这个不等是进行变形就得到 //#define LOCAL #include<cstdio> //#include<iostream>注意引入头文件,编译时候需要连接,是费内存的,如果不需要尽量不要引入 #include<algorithm> int

NYIST 1030 Yougth&#39;s Game[Ⅲ]

Yougth's Game[Ⅲ]时间限制:3000 ms | 内存限制:65535 KB难度:4 描述有一个长度为n的整数序列,A和B轮流取数,A先取,每次可以从左端或者右端取一个数,所有数都被取完时游戏结束,然后统计每个人取走的所有数字之和作为得分,两人的策略都是使自己的得分尽可能高,并且都足够聪明,求A的得分减去B的得分的结果. 输入输入包括多组数据,每组数据第一行为正整数n(1<=n<=1000),第二行为给定的整数序列Ai(-1000<=Ai<=1000). 输出对于每组数

Yougth的最大化(好题,二分查找 0 1分数规划)

Yougth的最大化 时间限制:1000 ms  |  内存限制:65535 KB 难度:4 描述 Yougth现在有n个物品的重量和价值分别是Wi和Vi,你能帮他从中选出k个物品使得单位重量的价值最大吗? 输入 有多组测试数据每组测试数据第一行有两个数n和k,接下来一行有n个数Wi和Vi.(1<=k=n<=10000) (1<=Wi,Vi<=1000000) 输出 输出使得单位价值的最大值.(保留两位小数) 样例输入 3 2 2 2 5 3 2 1 样例输出 0.75 1 #in

问题 L: Yougth的最大化

题目描述 Yougth现在有n个物品的重量和价值分别是Wi和Vi,你能帮他从中选出k个物品使得单位重量的价值最大吗? 输入 有多组测试数据 每组测试数据第一行有两个数n和k,接下来一行有n个数Wi和Vi. (1<=k=n<=10000) (1<=Wi,Vi<=1000000) 输出 输出使得单位价值的最大值.(保留两位小数) 样例输入 3 2 2 2 5 3 2 1 样例输出 0.75 1 /*解题思路: 2 3 这道题目是一道0-1分数规划求最优值.方法是一个二分搜索+贪心的题目

Yougth的最大化

1 #include <iostream> 2 #include <cstdio> 3 #include <algorithm> 4 #include <cmath> 5 6 using namespace std; 7 8 #define N 10010 9 10 double w[N],v[N],ave[N]; 11 int k,n; 12 double max1; 13 14 int check(double x) 15 { 16 double sum

nyoj914Yougth的最大化(二分搜索 + 贪心)

Yougth的最大化 时间限制:1000 ms | 内存限制:65535 KB 难度:4 描述 Yougth现在有n个物品的重量和价值分别是Wi和Vi,你能帮他从中选出k个物品使得单位重量的价值最大吗? 输入 有多组测试数据 每组测试数据第一行有两个数n和k,接下来一行有n个数Wi和Vi. (1<=k=n<=10000) (1<=Wi,Vi<=1000000) 输出 输出使得单位价值的最大值.(保留两位小数) 样例输入 3 2 2 2 5 3 2 1 样例输出 0.75 来源 Yo