POJ2976二分搜索解决平均值最大化问题
2014-12-30 12:25
190 查看
//一道最大化平均值的问题
//输出是100*平均值的最大值并且取其中最接近的整数
//由于贪心算法不行只能二分查找法了
//同时由于是lb和ub过于小所以循环100次就行了接近精度10-30次方
//164K 282MS
#include <iostream>
#include <algorithm>
using namespace std;
#define MAX_N 1005
static int a[MAX_N];
static int b[MAX_N];
static double y[MAX_N];
static int N,K;
static bool C(double x){
for (int i=0;i<N;++i)
y[i] = a[i] - x*b[i];
sort(y,y+N);
double sum = 0;
for (int i=0;i<(N-K);++i)
sum += y[N-i-1];
return sum>=0;
}
int main(){
while(scanf("%d %d",&N,&K)==2){
if (!N&&!K)
break;
double lb = 0;
double ub = 1;
memset(a,0,sizeof(a));
memset(b,0,sizeof(b));
for (int i=0;i<N;++i)
scanf("%d",&a[i]);
for (int i=0;i<N;++i)
scanf("%d",&b[i]);
for (int i=0;i<100;++i)//2的100次方
{
double mid = (lb+ub)/2;
if (C(mid))
lb = mid;
else
ub = mid;
}
int ret = ub*100 + 0.5;
printf("%d\n",ret);
}
return 0;
}
//输出是100*平均值的最大值并且取其中最接近的整数
//由于贪心算法不行只能二分查找法了
//同时由于是lb和ub过于小所以循环100次就行了接近精度10-30次方
//164K 282MS
#include <iostream>
#include <algorithm>
using namespace std;
#define MAX_N 1005
static int a[MAX_N];
static int b[MAX_N];
static double y[MAX_N];
static int N,K;
static bool C(double x){
for (int i=0;i<N;++i)
y[i] = a[i] - x*b[i];
sort(y,y+N);
double sum = 0;
for (int i=0;i<(N-K);++i)
sum += y[N-i-1];
return sum>=0;
}
int main(){
while(scanf("%d %d",&N,&K)==2){
if (!N&&!K)
break;
double lb = 0;
double ub = 1;
memset(a,0,sizeof(a));
memset(b,0,sizeof(b));
for (int i=0;i<N;++i)
scanf("%d",&a[i]);
for (int i=0;i<N;++i)
scanf("%d",&b[i]);
for (int i=0;i<100;++i)//2的100次方
{
double mid = (lb+ub)/2;
if (C(mid))
lb = mid;
else
ub = mid;
}
int ret = ub*100 + 0.5;
printf("%d\n",ret);
}
return 0;
}
相关文章推荐
- 《挑战程序设计竞赛》3.1.2 二分搜索-最大化平均值 POJ2976 3111
- poj 3111 K Best (二分搜索之最大化平均值之01分数规划)
- POJ 2976 Dropping tests(二分搜索,最大化平均值)
- 二分搜索/查找(最大化or最小化问题)
- 最大化平均值---二分搜索
- 最大化平均值(二分搜索)
- poj 2976 Dropping tests (二分搜索之最大化平均值之01分数规划)
- 最大化平均值 - 二分搜索
- Aggressive cows(最大化最小值问题(二分搜索))
- 最大化平均值---二分搜索
- POJ - 2976 Dropping tests(二分搜索:最大化平均值)
- poj 3111 K Best 二分搜索 最大化平均值
- POJ2976_Dropping tests_二分最大化平均值
- 最大化平均值(二分搜索)
- 【二分查找-最大化平均值】POJ2976 - Dropping Test
- POJ 3111 K Best(二分搜索,最大化平均值)
- poj K Best 最大化平均值 二分搜索
- POJ 2976 Dropping tests 0/1分数规划问题 最大化平均值 贪心+二分
- K Best(最大化平均值(二分搜索))
- 解决 ubuntu9.10 升级后 firfox 3.5 搜索工具栏(searchbox) 下拉图标消失的问题