标签:int LL factory POJ Yogurt c2 c1 include 酸奶
原题
题目分析
简单贪心题,从第一周开始,每过一周就把当周酸奶的生产价格加入优先队列中,不过由于存储要钱,所以加入优先队列需要一点额外操作.想一下当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
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。