Yogurt factory POJ 2393(贪心)
作者:互联网
原题
题目分析
简单贪心题,从第一周开始,每过一周就把当周酸奶的生产价格加入优先队列中,不过由于存储要钱,所以加入优先队列需要一点额外操作.想一下当i周时,第一周生产的酸奶加上存储成本c1=c1+s*(i-1),第二周生产的酸奶同理,c2=c2+s*(i-2)...我们要从中选处理后价格最小的,由于这是相对的,我们可以对每个酸奶的成本减去一个s*i,则处理后为 c1=c1-s,c2=c2-2*s,c3=c3-3*s,同样最小的那个酸奶即为最后解,因此每次加入优先队列,加入的值是c-s*i,而取出来的值只需要加回s*i就可以还原原来的价格了.
代码
1 #include <iostream> 2 #include <algorithm> 3 #include <utility> 4 #include <cstdio> 5 #include <cmath> 6 #include <cstring> 7 #include <string> 8 #include <vector> 9 #include <stack> 10 #include <queue> 11 #include <map> 12 #include <set> 13 14 using namespace std; 15 typedef long long LL; 16 const int INF_INT=0x3f3f3f3f; 17 const LL INF_LL=0x3f3f3f3f3f3f3f3f; 18 19 int main() 20 { 21 // freopen("black.in","r",stdin); 22 // freopen("black.out","w",stdout); 23 LL n,s; 24 cin>>n>>s; 25 LL sum=0; 26 priority_queue<LL,vector<LL>,greater<LL> > que; 27 for(int i=0;i<n;i++) 28 { 29 LL c,y; 30 scanf("%lld %lld",&c,&y); 31 que.push(c-s*i); 32 LL p=que.top(); 33 sum+=y*(p+i*s); 34 } 35 printf("%lld\n",sum); 36 return 0; 37 }
标签:int,LL,factory,POJ,Yogurt,c2,c1,include,酸奶 来源: https://www.cnblogs.com/VBEL/p/11401752.html