Elite 2010 January Competition USACO Contest, SILVER DIVISION
题意:一条直线长度为e上,有n个站点,每个站点上有1个或多个购物点。你需要在这n个站点上买到k磅物品。每个站点可以以C_i的价格卖给FJ 最多F_i磅东西。其中FJ的移动是单向的,且载在t磅东西移动y个单位,会造成t*y的额外消费。求使得最终消费最小。
题解:把每个站点的每磅物品看成是一件物品,每件物品除了卖价之外,还附加了从站点到终点的运费。所以把这些物品的花费是固定了,且不同。所以就排序一次,取花费最少的前k个物品。
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
int line[12000],l;
int main()
{
int k,e,n,i,j,t,t1,t2,t3,ans;
scanf("%d%d%d",&k,&e,&n);
l=0;
for (i=0; i<n; i++)
{
scanf("%d%d%d",&t1,&t2,&t3);
t=e-t1;
for (j=0; j<t2; j++)
{
line[l]=t+t3;
l++;
}
}
ans=0;
sort(line,line+l);
for (i=0; i<k; i++)
{
ans+=line[i];
}
printf("%d\n",ans);
}