hdu2570(贪心)

http://acm.hdu.edu.cn/showproblem.php?pid=2570

也算细心题啊。

View Code
#include"iostream"
#include
"algorithm"
using namespace std;
int main()
{
int i,t;
int n,v,w;
double a[110];
cin
>>t;
while(t--)
{
cin
>>n>>v>>w;
for(i=0;i<n;i++) cin>>a[i];
sort(a,a
+n);
double p=0.0;
int k=0;

for(i=0;i<n;i++)
{
if((p*i+a[i])/(i+1)<=w) //(sum*i*v+a[i]*v)/((i+1)*v)
{
p
=(p*i+a[i])/((i+1));
}
else break;
}
printf(
"%d %.2lf\n",i*v,p/100);
}
return 0;
}

下面这个是一开始的方法,因为少乘了个v,w了n次,悲剧!

View Code
#include"iostream"
#include
"algorithm"
using namespace std;
int main()
{
int t,i,j;
int n,v,w;
int a[110];
cin
>>t;
while(t--)
{
cin
>>n>>v>>w;
for(i=0;i<n;i++) cin>>a[i];
sort(a,a
+n);
double sum=0,s=0;

__int64 k
=0;
int t=1;
for(i=0;i<n;i++)
{
s
+=a[i]*v; //这儿刚开始就因为少乘了一个V,结果错了n次,而测试例子正好不影响,悲剧啊!
if(s/(v*(i+1))<=w)
{
sum
=s/(v*(i+1));
k
++;
}
else break;
}

printf(
"%I64d %.2lf\n",k*v,sum/100);

}
return 0;
}
原文地址:https://www.cnblogs.com/FCWORLD/p/2036083.html