http://acm.nyist.net/JudgeOnline/problem.php?pid=248
题意:一条数轴上有n个商店,第i个商店在Xi的位置,最多可以卖Fi磅feed,每磅Ci元。一个人从起点0开始,终点为E,当他到达E点时,至少要买K磅feed,带着1磅feed每前进一个单位,就要额外花费1元。求最小花费是多少。
#include<cstdio>
#include<algorithm>
using namespace std;
int k,e,n;
struct Node
{
int x,f,c;
bool operator <(const Node & t) const{
return ((c+(e-x))<(t.c+(e-t.x)));//买1磅到达E点时的花费
}
}arr[110];
int main(){
int t;
scanf("%d",&t);
while(t-- )
{
scanf("%d%d%d",&k,&e,&n);
for(int i=1;i<=n;i++)
{
scanf("%d%d%d",&arr[i].x,&arr[i].f,&arr[i].c);
}
sort(arr+1,arr+1+n);
int sum=0;
for(int i=1;i<=n;i++)
{
if(k>=arr[i].f)
{
k-=arr[i].f;
sum+=arr[i].c*arr[i].f+arr[i].f*(e-arr[i].x);
}
else
{
sum+=k*arr[i].c+k*(e-arr[i].x);
break;
}
}
printf("%d\n",sum);
}
}