Input
输入数据首先包含一个正整数C,表示有C组测试用例,每组测试用例的第一行是两个整数n和m(0<n<=1000,0<m<=1000),分别表示经费的金额和大米的种类,然后是m行数据,每行包含2个整数p和h(1<=p<=25,1<=h<=100),分别表示单价和对应大米的重量。
|
Output
对于每组测试数据,请输出能够购买大米的最多重量(你可以假设经费买不光所有的大米)。
每个实例的输出占一行,保留2位小数。 |
Sample Input
1 7 2 3 3 4 4 |
Sample Output
2.33 |
先贴出我的代码:
#include <iomanip>
#include <iostream>
using namespace std;
struct make {
float danprice;
float wei;
};
int main()
{
int num;
make stuch;
cin>>num;
int allprice;
int count;
float oo=0;
for(int i=0;i<num;i++)
{
cin>>allprice>>count;
make *newstu=new make[count];
for(int n=0;n<count;n++)
{
cin>>newstu[n].danprice>>newstu[n].wei;
}
for(int a=0;a<count;a++)//冒泡
for(int b=0;b<count-a-1;b++)
if(newstu[b].danprice>newstu[b+1].danprice)
{
stuch=newstu[b+1];
newstu[b+1]=newstu[b];
newstu[b]=stuch;
}
for(int i1=0;i1<n;i1++)//贪心算法
{
if(allprice>newstu[i1].danprice*newstu[i1].wei)
{oo+=newstu[i1].wei;
allprice-=newstu[i1].danprice*newstu[i1].wei;
}
else
{
oo+=allprice/newstu[i1].danprice;
break;
}
}
cout<<fixed<<setprecision(2)<<oo<<endl;
oo=0;
}
return 0;
}