P2240 【深基12.例1】部分背包问题
输入
4 50
10 60
20 100
30 120
15 45
输出
240.00
一道水题,哈哈 结果还是WA一次,我还是太菜了。
#include <iostream>
#include<cstdio>
#include<string.h>
#include<algorithm>
using namespace std;
struct node {
int m, v;
double j;
}a[100+10];
bool cmp(node x, node y) {
return x.j > y.j;
}
//按价值排序就行
int main()
{
int n, t;
cin >> n >> t;
for (int i = 0; i < n; i++) {
cin >> a[i].m >> a[i].v;
a[i].j = (double)a[i].v /(double) a[i].m;//double就是我WA第一次的地方,唉
}
sort(a, a + n, cmp);
int sum = 0;
double ans = 0;
for (int i = 0; i < n; i++) {
if (sum <t) {
if (a[i].m <= (t - sum)) {
sum += a[i].m;
ans += a[i].v;
}
else {
ans += (t - sum) * a[i].j;
break;
}
}
else {
break;
}
}
printf("%.2lf", ans);
return 0;
}