我的思路就是全部计算出单价,按其排序,优先放单价高的,然后装满背包,但是为什么我的代码示例都没过啊
#include <bits/stdc++.h>
//#include "zc2008.h"
using namespace std;
struct datain
{
int cost;
int val;
double djia;
void calc()
{
djia = double(val / cost);
}
} datainput[110];
bool cmp(datain a, datain b)
{
return a.djia > b.djia;
}
int main()
{
int n, t;
cin >> n >> t;
for (int i = 0; i < n; i++)
{
cin >> datainput[i].cost >> datainput[i].val;
datainput[i].calc();
}
sort(datainput, datainput + n, cmp);
double plus = 0;
double totval = 0;
for (int i = 0; i < n; i++)
{
if (datainput[i].cost > t)
{
plus = datainput[i].cost - t;
totval += plus * datainput[i].djia;
break;
}
else
{
totval += datainput[i].val;
}
}
printf("%0.2f",totval);
cout << endl;
return 0;
}