首页 > 其他分享 >P2034 选择数字

P2034 选择数字

时间:2024-03-09 16:45:13浏览次数:38  
标签:P2034 数字 ll long 选择 front 断点 sum dp

原题链接

题解

不能连续选k个元素 \(\to\) 任意每k个元素就有一个不选 \(\to\) 每k个点就有一个断点
\(\to\) 每个点都有可能是断点 \(\to\) dp求解

\(sol.1\)
令 \(f[i]\) 为第i个点为断点且为结尾的最大值
则 \(f[i]=max(f[j]+sum[j+1,i-1])\)

\(sol.2\)
至少每隔k个点就取一个点,取点和的最小值

\(code1\),优先队列,\(O(n·logn)\)

#include<bits/stdc++.h>
using namespace std;
#define ll long long
struct node
{
    ll v,x;
    bool operator <(const node &b)const {return b.v<v;}
};
ll dp[1000005]={0};
ll a[1000005];
int main()
{
    ll n,k,sum=0;
    cin>>n>>k;
    for(ll i=1;i<=n;i++)
    {
        cin>>a[i];
        sum+=a[i];
    }

    priority_queue<node> q;
    ll ans=2e18;
    for(ll i=1;i<=n;i++)
    {
        q.push({dp[i-1],i-1});
        while(q.size()&&i-q.top().x>k+1) q.pop();
        dp[i]=a[i];
        if(q.size()) dp[i]+=q.top().v;
        if(i+k>=n)ans=min(ans,dp[i]);
        //cout<<dp[i]<<endl;
    }

    cout<<sum-ans;
    return 0;
}

\(code2\),单调队列,\(O(n)\)

#include<bits/stdc++.h>
using namespace std;
#define ll long long
ll sum[1000005]={0},f[100005]={0};
ll a[1000005];
int main()
{
    ll n,k;
    cin>>n>>k;
    for(ll i=1;i<=n;i++)
    {
        cin>>a[i];
        sum[i]=sum[i-1]+a[i];
    }

    deque<ll> q;
    q.push_back(0);
    for(int i=1;i<=n;i++)
    {
        if(q.size()&&i-q.front()>k+1)q.pop_front();

        if(q.size())  f[i]=f[q.front()]+sum[i-1]-sum[q.front()];
        while(q.size()&&f[q.back()]-sum[q.back()]<=f[i]-sum[i]) q.pop_back();
        q.push_back(i);
        //cout<<f[i]<<endl;
    }

    if(q.size()&&n-q.front()>k) q.pop_front();
    cout<<f[q.front()]+sum[n]-sum[q.front()];
    return 0;
}

标签:P2034,数字,ll,long,选择,front,断点,sum,dp
From: https://www.cnblogs.com/pure4knowledge/p/18062924

相关文章

  • 照片也能说话了?嘴型表情全同步,AI数字人时代要来了
    SadTalker是一款先进的人工智能模型,它通过从音频中学习生成3D运动系数,并使用全新的三维面部渲染器来生成头部运动,只需传入一张照片和一段音频,就能生成高质量的AI数字人视频工作原理1、显式地对音频和不同类型的运动系数之间的联系进行单独建模2、通过蒸馏系数和3D渲染的脸部,从......
  • Java ArrayList 与 LinkedList 的灵活选择
    JavaArrayListJavaArrayList类是一个可变大小的数组,位于java.util包中。创建ArrayListimportjava.util.ArrayList;ArrayList<String>cars=newArrayList<String>();//创建一个ArrayList对象添加元素cars.add("Volvo");cars.add("BMW");cars.add(......
  • 双体技术学习选择结构
    选择结构ifif-else-elseswitchif···javapublicclasssda{publicstaticvoidmain(String[]args){intx=1;inty;if(x>0){y=x;}else{y=-x;}System.out.println(y);}}if-else-else···javapublicclasssda......
  • 02选择器
    1<!DOCTYPEhtml>2<htmllang="en">3<head>4<metacharset="UTF-8">5<metaname="viewport"content="width=device-width,initial-scale=1.0">6<title>Document......
  • 工作常用的EXCEL公式 | 将一个字符串中的文本和数字进行拆分
    需求:将A列拆分成B、C列 公式:=LEFT(A2,2*LEN(A2)-LENB(A2))=RIGHT(A2,LENB(A2)-LEN(A2)) 函数用法说明: ......
  • javascript匹配文件名相同然后在后面增加数字的正则表达式
    在一个文件列表中constrenameFileName=(fileName:string)=>{console.log("originfilename",fileName)letfileList=getFileList()//获取文件列表,包含了文件名letcount=-1//记录当前包含了几个文件名fileList.forEach(value=>{letfullFil......
  • 当未指定且存在多个构造器,实例化对象时Spring如何选择?
    前言在前面的讲解中,我们了解了如何获取构造器。当只有一个符合条件的构造器时,自然会选择它作为初始化的构造器。然而,在上一节中,我们遇到了一种特殊情况:当有多个符合条件的构造器时,返回的是一个数组。在这种情况下,Spring又是如何从多个构造器中选择最合适的呢?今天,我们将讨论的主题......
  • 【专题】2023年中国奢侈品市场数字化趋势洞察报告PDF合集分享(附原数据表)
    原文链接:https://tecdat.cn/?p=33672原文出处:拓端数据部落公众号2022年,中国的奢侈品消费市场一直处于不断变化和挑战之中,但随着2023年的到来,中国正在全面复苏,市场也充满了机遇和想象空间。自2019年以来,奢侈品品牌一直在中国尝试本地化和数字化策略,将中国的奢侈品消费者与国内市......
  • 无分类域间路由选择(CIDR)
    构成超网,网络1:206.1.0.0/17网络2:206.1.128.0/17网络1和网络2聚合成一个较大的子网前16位相同,从第17位开始10000000和网络2的第17位00000000取交集得到聚合后的超网206.1.0.0/16划分子网由少到多的过程构成超网是由多到少的过程 地址解析协议ARP无论网络层使用什......
  • 数字先锋 | 望闻问切更有“数”!
    中医凝聚着中华民族几千年的健康养生理念和实践经验,是中华民族的瑰宝,随着新一代信息技术发展应用,数字化、智能化成为中医高质量发展新方向。《“十四五”中医药发展规划》提出,加强中医医院智慧化建设,推动中医药健康服务与互联网深度融合,为中医院可持续发展阐明了道路。在此背景下......