博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
bzoj3874[Ahoi2014]宅男计划
阅读量:6326 次
发布时间:2019-06-22

本文共 1687 字,大约阅读时间需要 5 分钟。

题意:

n种食物,每种有价钱和保质期。每次叫外卖要F元,可以购买任意多份食物。共有m元,问一共能过多少天使得每天都能吃到一份不过期的食物。n≤200,其他都≤1018

题解:

先排序+单调队列去掉那些价钱贵保质期反而短的外卖,剩下的队列按保质期从短到长排(也就是价钱从便宜到贵排)。然后有结论:生存天数为以叫外卖次数为自变量的单峰函数。因此三分叫外卖次数(注意上界为m/最便宜外卖的价钱),如何根据叫外卖次数求生存天数呢?又有结论:每次叫外卖间隔时间越平均越优。设叫外卖次数为k,从便宜到贵买,依次扩充叫外卖间隔时间,当最后钱不够买齐k组当前食物时,则能买多少组买多少。

代码:

1 #include 
2 #include
3 #include
4 #define inc(i,j,k) for(int i=j;i<=k;i++) 5 #define ll long long 6 #define maxn 300 7 using namespace std; 8 9 inline ll read(){10 char ch=getchar(); ll f=1,x=0;11 while(ch<'0'||ch>'9'){
if(ch=='-')f=-1; ch=getchar();}12 while(ch>='0'&&ch<='9')x=x*10+ch-'0',ch=getchar();13 return f*x;14 }15 struct nd{ll p,s;}; nd a1[maxn],a2[maxn];16 ll p[maxn],s[maxn],m,f,l,r,ans; int n;17 bool cmp(nd a,nd b){
return a.s==b.s?a.p>b.p:a.s
=day){22 ll a=min(cost/a2[i].p/k,a2[i].s-day+1); day+=a; ans+=a*k; cost-=a*k*a2[i].p;23 }24 if(a2[i].s>=day){25 ll a=min(k,cost/a2[i].p); day++; ans+=a; cost-=a*a2[i].p;26 } 27 }28 return ans;29 }30 int main(){31 m=read(); f=read(); n=(int)read(); inc(i,1,n)a1[i].p=read(),a1[i].s=read(); sort(a1+1,a1+1+n,cmp);32 r=1; a2[r]=a1[1];33 inc(i,2,n){
while(r&&a2[r].p>a1[i].p)r--; a2[++r]=a1[i];} n=r;34 l=1; r=(m/(f+a2[1].p)); ans=0;35 while(l<=r){36 ll mid1=l+(r-l)/3,mid2=r-(r-l)/3,c1=calc(mid1),c2=calc(mid2);37 if(c1
c2)ans=max(ans,c1),r=mid2-1;39 else ans=max(ans,c1),l=mid1+1,r=mid2-1;40 }41 printf("%lld",ans); return 0;42 }

 

20160719

转载于:https://www.cnblogs.com/YuanZiming/p/5686580.html

你可能感兴趣的文章
美国人的网站推广方式千奇百怪
查看>>
Shashlik:Linux 上运行 Android 应用的新法子
查看>>
《精解Windows8》——2.13 常用快捷键
查看>>
《Greenplum企业应用实战》一1.2 OLTP与OLAP
查看>>
Windows 8部署系列PART7:配置MDT部署目标
查看>>
oracl安装脚本
查看>>
在CentOS 7系统上架设DNS服务
查看>>
使用pandas的dataframe清理excel里面空值
查看>>
setTimeout和setInterval的使用
查看>>
rsync同步工具学习笔记
查看>>
让eclipse支持类似VS的Region
查看>>
raid级别有哪些和它们之间的区别
查看>>
关于全文搜索的技术方案
查看>>
Chrome浏览器中对form表单用onsubmit进行拦截后无法再次提交的问题
查看>>
大学知识下放高中:平面法向量的求法
查看>>
我的友情链接
查看>>
WLS_056:同一个ear中不同的Web应用如何共享Session?
查看>>
wxWidgets与其他工具库的比较(上)
查看>>
C++ 异常 与 ”为什么析构函数不能抛出异常“ 问题
查看>>
理解索引(上)
查看>>