poj 1862 贪心
2017-01-03 14:05
141 查看
题意:从N个数任取两个数按2*sqrt(a*b)合成新数放回,求最后那个数的最小值。
思路:贪心,每次取最大的2个数,计算结果后,再放回原来的数列中区,再排序,再取最大2个数,一直进行到只剩1个数
#include<stdio.h>
#include<math.h>
double worm[111];
void qsort(int l,int r) //快速排序 最好用优先队列(但是我不会用C写优先队列,C++中有STL,可以直接用)
//每次取最大的2个数
{
int i,j;
double temp;
if(l<r)
{
i=l;
j=r;
temp=worm[l];
while(i<j)
{
while(i<j&&worm[j]>=temp)
j--;
if(i<j)
worm[i++]=worm[j];
while(i<j&&worm[i]<temp)
i++;
if(i<j)
worm[j--]=worm[i];
}
worm[i]=temp;
qsort(l,i-1);
qsort(i+1,r);
}
}
int main(void)
{
int i,N;
scanf("%d",&N);
for(i=0;i<N;i++)
scanf("%lf",&worm[i]);
qsort(0,N-1);
while(N>1)
{
worm[N-2]=2*sqrt(worm[N-1]*worm[N-2]);
N--;
qsort(0,N-1);
}
printf("%.3lf\n",worm[0]);
}
思路:贪心,每次取最大的2个数,计算结果后,再放回原来的数列中区,再排序,再取最大2个数,一直进行到只剩1个数
#include<stdio.h>
#include<math.h>
double worm[111];
void qsort(int l,int r) //快速排序 最好用优先队列(但是我不会用C写优先队列,C++中有STL,可以直接用)
//每次取最大的2个数
{
int i,j;
double temp;
if(l<r)
{
i=l;
j=r;
temp=worm[l];
while(i<j)
{
while(i<j&&worm[j]>=temp)
j--;
if(i<j)
worm[i++]=worm[j];
while(i<j&&worm[i]<temp)
i++;
if(i<j)
worm[j--]=worm[i];
}
worm[i]=temp;
qsort(l,i-1);
qsort(i+1,r);
}
}
int main(void)
{
int i,N;
scanf("%d",&N);
for(i=0;i<N;i++)
scanf("%lf",&worm[i]);
qsort(0,N-1);
while(N>1)
{
worm[N-2]=2*sqrt(worm[N-1]*worm[N-2]);
N--;
qsort(0,N-1);
}
printf("%.3lf\n",worm[0]);
}
相关文章推荐
- POJ-1862-Stripies(贪心4)
- POJ 1862 Stripies 贪心+优先队列
- poj1862~Stripies~贪心+优先队列
- POJ 1862 Stripies 贪心+优先队列
- 贪心 + 数学 (POJ 1862)
- POJ-1862--贪心---Stripies
- POJ 1862 Stripies 贪心
- POJ 1862 (贪心)
- POJ 1862 & ZOJ 1543 Stripies(贪心 | 优先队列)
- poj 1862 还是哈夫曼思想贪心
- poj 1862 Stripies 优先队列 贪心
- POJ 1862 & ZOJ 1543 Stripies(贪心 | 优先队列)
- Poj 1862 Stripies【贪心+数学】
- Stripies(POJ 1862 贪心)
- 【原创】【合并类贪心】POJ 3253 1862 2709; Fence Repair && Stripies && Painter
- 【简单贪心+优先队列】POJ - 1862 - Stripies
- poj 1862 Stripies简单贪心
- POJ 1862 Stripies (贪心)
- [POJ 1862] Stripies (贪心)
- 贪心 POJ 1862