题目:http://acm.nyist.net/JudgeOnline/problem.php?pid=248
分析:英文题目,看懂了,画几下,就发现其实就是一个贪心背包的变形,水题一个~话不多少,代码走起~
/*
部分背包的变体,水题
只需要算出每个商店的单位总费用 = 原单位费用+距离的费用
*/
#include <iostream>
using namespace std;
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <cmath>
#include <algorithm>
struct Node
{
int w,v;
};
Node stores[101];
int cmp(const void *a,const void *b)
{
Node *x = (Node*)a;
Node *y = (Node*)b;
return x->v - y->v;
}
int main()
{
int T;
cin >> T;
while (T--)
{
int k,e,n;
cin >> k >> e >> n;
for (int i = 0; i < n; ++i)
{
int x,f,c;
cin >> x >> f >> c;
stores[i].w = f;
stores[i].v = c + e - x;
}
qsort(stores,n,sizeof(Node),cmp);
int ans = 0;
for (int i = 0; i < n && k > 0; ++i)
{
if (stores[i].w <= k)
{
ans += stores[i].w*stores[i].v;
k -= stores[i].w;
}
else
{
ans += k*stores[i].v;
break;
}
}
cout << ans << endl;
}
return 0;
}