[HDOJ]1009. FatMouse' Trade
恩,简单的排序问题,以前的排序问题只是会牵扯一个数组,这次只不过是把两个数组结合起来排序而已。
为了以最小的F[i]得到最多的J[i],只需要按照F[i]/J[i]的值从大到小对两个数组重新排序下就可以了。然后再按照从大到小的数组去分配M pounds of cat food,直到food分配完或者所有的JavaBeans都被保护为止。AC代码如下:
#include <iostream>
#include <iomanip>
using namespace std;
int main()
{
#ifdef ONLINE_JUDGE
#else
freopen("1009.txt","r",stdin);
#endif
int m,n;
int J[1000],F[1000];
while(cin>>m>>n)
{
if(m == -1 && n == -1)
break;
//输入相应的J和F数组
for(int i = 0;i < n;++i)
cin>>J[i]>>F[i];
//按照F[i]/J[i]比例大小对两个数组进行排序
int t,temp;
double sum = 0.0;
for(int i = 0;i < n-1;++i)
{
t = i;
for(int j = i+1;j< n;++j)
if((J[j]*1.0/F[j]) > (J[t]*1.0/F[t]))
t = j;
temp = F[i];F[i] = F[t];F[t] = temp;
temp = J[i];J[i] = J[t];J[t] = temp;
}
int i = 0;
//分配老鼠手中所仅有的m pounds of cat food,直到food分配完毕或者所有的JavaBeans都得到了保护
while((m - F[i]) >=0 && i < n)
{
sum += J[i];
m = m - F[i];
++i;
}
if(i < n)
sum = sum + (m*1.0)/F[i]*J[i];
cout<<fixed<<setprecision(3)<<sum<<endl;
}
return 0;
}
我没有什么雄心壮志,我只想给自己和关心自己的家人和朋友一个交代,仅此而已。


浙公网安备 33010602011771号