标签:参考 href dash log bzoj center www lld 保存
有一个工厂,工厂现在每个月都有一个生产任务要做,给出n个生产任务,每个任务给出需要的产品数和当前月份的产品单价,第i个生产任务在第i个月时完成,每个月生产产品的单价可能不一样,但是一个月生产无数的产品,假如当前月份的任务用不了那么多产品,就要放在仓库里保存,每一个的产品放置一个月就要消耗费用s,求出完成这n个任务的最小费用
最近在刷USACO,但发现USACO上不去,在BZOJ勉强刷一波,但大部分是权限题,就只好用权限号了(没有权限号的蒟蒻——我)
其实这就是贪心,用p数组来记录每个月的最小单价,那么怎么来维护这个数组呢,首先当我们处理p[i]的时候,一定保证p[i-1]的单价一定是最低的,于是我们就取p[i-1]+s和第i个月份的单价的最小值,得出来的值就是p[i]了,之所以+s,是因为保存一个月的话每一个的产品就要消耗费用s,其实相当于把单价+s,所以我们这么做是可行的,答案记得开long long!
#include<cstdio> #include<cstring> #include<algorithm> #include<cstdlib> #include<cmath> using namespace std; typedef long long LL; int c[11000],a[11000],p[11000]; int main() { int n,s; scanf("%d%d",&n,&s); for(int i=1;i<=n;i++) scanf("%d%d",&c[i],&a[i]); LL ans=0; p[0]=999999999; for(int i=1;i<=n;i++) { p[i]=min(p[i-1]+s,c[i]); ans+=p[i]*a[i]; } printf("%lld\n",ans); return 0; }
BZOJ1680: [Usaco2005 Mar]Yogurt factory
标签:参考 href dash log bzoj center www lld 保存
原文地址:http://www.cnblogs.com/Never-mind/p/7742740.html