zoukankan      html  css  js  c++  java
  • P1725 琪露诺

    P1725 琪露诺


    单调队列优化dp

    对于不是常数转移的dp转移,我们都可以考虑单调队列转移

    然而我们要把数组开大

    #include<cstdio>
    #include<algorithm>
    #include<iostream>
    using namespace std;
    int read()
    {
    	int s=0,f=1;
    	char in=getchar();
    	while(in<'0'||in>'9')
    	{
    		if(in=='-')
    			f=-1;
    		in=getchar();
    	}
    	while(in>='0'&&in<='9')
    	{
    		s=(s<<1)+(s<<3)+in-'0';
    		in=getchar();
    	}
    	return s*f;
    }
    int data[301000];
    int dp[301000];
    struct node
    {
    	int value;
    	int rank;
    };
    node queue[2010000];
    int head=1,tail;
    int n,l,r;
    void push(int x,int pos)
    {
    	while(queue[tail].value<x&&tail>=head)
    		tail-=1;
    	tail+=1;
    	queue[tail].value=x;
    	queue[tail].rank=pos;
    }
    int top()
    {
    	return queue[head].value;
    }
    void pop(int pos)
    {
    	while(queue[head].rank<pos-r)
    		head+=1;
    	return ;
    }
    int main()
    {
    	n=read(),l=read(),r=read();
    	if(r<l)
    		swap(l,r);
    	for(int i=0;i<=n;i++)
    		data[i]=read();
    	for(int i=1;i<=l-1;i++)
    		dp[i]=-0x7fffffff;
    	for(int i=l;i<=n+r;i++)
    	{
    		push(dp[i-l],i-l);
    		pop(i);
    		dp[i]=data[i]+top();
    	}
    	int ans=-0x7fffffff;
    	for(int i=n+1;i<=n+r;i++)
    		ans=max(ans,dp[i]);
    	printf("%d",ans);
    }
    
  • 相关阅读:
    前端生成pdf文件之pdfmake.js
    vim 安装
    linux基础学习
    python 编码处理
    Ubuntu 下配置 SSH服务全过程及问题解决
    yum 安装
    Ubuntu安装MySQL
    Linux各发行版本及其软件包管理方法
    轻松学习LINUX系列教程推出
    常用命令
  • 原文地址:https://www.cnblogs.com/Lance1ot/p/8934020.html
Copyright © 2011-2022 走看看