[BZOJ3897]Power/[JZOJ3334]高富帅的日程表
来源:互联网 发布:c获取网卡mac地址 编辑:程序博客网 时间:2024/06/11 12:19
题目大意
给定
你的体力上限是
请你规划每一天的工作时长以获得最大的收益。
一个测试点有
题目分析
首先可以把这个问题看成一个完全背包问题,只不过每一天结束时
然后这样显然是会T的,分析发现其实这个
于是我们就可以使用一个双端队列来维护这个
时间复杂度
代码实现
实现起来细节比较多,请读者仔细分析。
#include <iostream>#include <cstdio>#include <cctype>using namespace std;typedef long long LL;int read(){ int x=0,f=1; char ch=getchar(); while (!isdigit(ch)) f=ch=='-'?-1:f,ch=getchar(); while (isdigit(ch)) x=x*10+ch-'0',ch=getchar(); return x*f;}const int N=500050;const int E=1000050;struct data{ int delta; LL f,x; data(LL f_=0,LL x_=0,int delta_=0){f=f_,x=x_,delta=delta_;}}q[N];int lim,R,n,T,top,head,tail,tag;int v[N];LL ans;void dp(){ ans=0,head=1,tail=0; for (int i=1;i<=n;++i) { LL lst=R-1-1ll*tag*R; for (;head<=tail&&q[tail].delta<=v[i];lst=q[tail--].x); q[tail+1]=head<=tail?data(q[tail].f+1ll*(q[tail].x-lst-1)*q[tail].delta+v[i],lst,v[i]):data(ans+v[i],lim-1-1ll*tag*R,v[i]),++tail; if (R>lim) ans=q[tail].f+1ll*(q[tail].x+1ll*tag*R)*q[tail].delta,head=tail+1; ++tag; for (;head<=tail&&q[head].x+1ll*tag*R>=lim;ans=1ll*(q[head].x-q[head+1].x-1)*q[head].delta+q[head].f,++head) if (head==tail||q[head+1].x+1+1ll*tag*R<lim) { ans=1ll*(q[head].x+1ll*tag*R-lim)*q[head].delta+q[head].f,q[head].x=lim-1-1ll*tag*R; q[head].f=ans+q[head].delta; break; } } if (head<=tail) ans=1ll*(q[tail].x+1ll*tag*R-R)*q[tail].delta+q[tail].f;}int main(){ freopen("power.in","r",stdin),freopen("power.out","w",stdout); for (T=read();T--;) { lim=read(),R=read(),n=read(); for (int i=1;i<=n;++i) v[i]=read(); dp(),printf("%lld\n",ans); } fclose(stdin),fclose(stdout); return 0;}
阅读全文
0 0
- [BZOJ3897]Power/[JZOJ3334]高富帅的日程表
- 【BZOJ3897】Power 线段树求前驱后缀
- 简单日程表的实现
- 日程表
- 日程表
- 日程表
- 【日程表】
- 日程表
- 日程表
- 日程表
- 循环赛日程表的多边形解法
- 循环赛日程表的多边形解法
- 循环赛日程表的多边形解法
- 项目计划与日程表的悖论
- 关于循环赛日程表算法的研究
- 有关测试日程表的一个极没有水平的示例
- 你已经足够努力了吗?看看她们的日程表吧
- 林域之间的Outlook日程表共享端口
- Git-----Git中创建与合并分支
- PAT甲级1012
- Python-基础学习笔记(四)
- 初学者:java有序数组插值
- JAVA——网络编程(1):Java编写简单的UDP网络程序
- [BZOJ3897]Power/[JZOJ3334]高富帅的日程表
- Maven项目同时使用lib下的Jar包
- [推荐算法]UserCF,基于用户的协同过滤算法
- 总结5种比较高效常用的排序算法
- POJ 2373 Dividing the Path
- 排序算法总结(2)--插入排序
- 哈希曼的数据结构的代码(课堂代码)
- CodinGame: The Descent 反思
- 湖北民族学院oj 1889之 鹦鹉学舌