BNUOJ 4151 Buying Feed II

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

你可能感兴趣的:(BNUOJ 4151 Buying Feed II)