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); }