##include<iostream>
#include<algorithm>
#include<string>
using namespace std;
int main()
{
int N,D,maxp;
int a1[10001]={0},i,j;
float a2[10001]={0},b[10001]={0},maxsum;
scanf("%d %d",&N,&D);
//cout<<N<<" "<<D<<endl;
for(i=0;i<N;i++)
{
scanf("%d",&a1[i]);
}
for(i=0;i<N;i++)
{
scanf("%f",&a2[i]);
}
for(i=0;i<N;i++)
{
b[i]=a2[i]/a1[i];
//printf("%f\n",b[i]);
}
maxsum=0;
while(D)
{
maxp=max_element(b,b+N)-b;
//printf("%d\n",maxp);
if(a1[maxp]>=D)
{
maxsum+=b[maxp]*D;
//maxsum+=a2[maxp]/a1[maxp]*D;
D=0;
//break;
}
else
{
maxsum+=b[maxp]*a1[maxp];
//maxsum+=a2[maxp];
D-=a1[maxp];
}
//printf("%d %f %d %f\n",maxp,b[maxp],a1[maxp],maxsum);
b[maxp]=0;
}
printf("%.2f\n",maxsum);
return 0;
}
提交结果:
用到的方法:C++常用函数,数组或vector的最大值函数max_element()
max_element(),min_element() 返回的是第一个最大(小)元素的位置
函数使用例子:
#include <iostream>//输入输出
#include<algorithm>//max_element(),min_element()
#include <vector>
using namespace std;
void main() {
//max_element用于返回最大值的下标,*max_element用来取最大值
int a[5] = { 2, 3, 5, 4, 5 };
cout << (*max_element(a, a + 5)) << ' ';
cout << (*min_element(a, a + 5)) << endl;
cout << max_element(a, a + 5)-a << ' ';
cout << min_element(a, a + 5)-a << endl;
//通过数组a的地址初始化,注意地址是从0到5(左闭右开区间)
vector<int> b(a, a + 5);
cout << (*max_element(b.begin(), b.begin() + 5)) << ' ';
cout << (*min_element(b.begin(), b.begin() + 5)) << endl;
cout << max_element(b.begin(), b.begin() + 5)- b.begin() << ' ';
cout << min_element(b.begin(), b.begin() + 5) - b.begin() << endl;
}
输出结果:
5 2
2 0
5 2
2 0