Codeforces Round #426 (Div. 2) D. The Bakery(DP+线段树) 好题

TPM2-Startup-学习手册.docx 内容概要:本文深入解析了TPM 2.0中首个必要命令TPM2_Startup的工作机制,涵盖其在芯片初始化中的核心作用、启动类型决策逻辑、内部九个初始化阶段的详细流程,以及DRTM/H-CRTM安全机制的实现原理。文档结合源码(ibmswtpm2-tpm2)与实测报文,系统阐述了Startup如何通过状态校验、locality控制、PCR管理、密码学初始化、DA防护、ACT定时器、NV索引处理等环节,确保TPM在安全可信的状态下启动,并重点剖析了commitNonce重置、DA计时器跨重启续接、ACT减半防攻击等关键安全设计。; 适合人群:对TPM安全芯片感兴趣的零基础或初级开发者,以及从事可信计算、固件安全、系统启动安全相关工作的研发人员。; 使用场景及目标:①理解TPM为何必须以Startup作为第一条命令及其安全意义;②掌握SU_CLEAR、SU_STATE、SU_RESUME、SU_RESTART、SU_RESET等启动类型的决策逻辑与状态迁移;③深入学习DRTM与H-CRTM机制,理解动态信任根的建立过程;④分析DA防护、ACT定时器、有序NV索引等子系统的初始化行为与安全考量;⑤通过实验复现各类启动场景,提升对TPM底层机制的实战理解。; 阅读建议:建议结合文档提供的源码注释、实测报文和动手实验逐步验证,重点关注Startup与Shutdown的配对关系、状态持久化机制(NV)以及各类标志位(如g_DrtmPreStartup、g_StartupLocality3)的作用,注意区分规范定义与具体实现间的差异,并利用附录常量与术语表辅助理解。 立即下载

直接转载自:http://blog.youkuaiyun.com/ssimple_y/article/details/76410328

Some time ago Slastyona the Sweetmaid decided to open her own bakery! She bought required ingredients and a wonder-oven which can bake several types of cakes, and opened the bakery.

Soon the expenses started to overcome the income, so Slastyona decided to study the sweets market. She learned it’s profitable to pack cakes in boxes, and that the more distinct cake types a box contains (let’s denote this number as the value of the box), the higher price it has.

She needs to change the production technology! The problem is that the oven chooses the cake types on its own and Slastyona can’t affect it. However, she knows the types and order of n cakes the oven is going to bake today. Slastyona has to pack exactly k boxes with cakes today, and she has to put in each box several (at least one) cakes the oven produced one right after another (in other words, she has to put in a box a continuous segment of cakes).

Slastyona wants to maximize the total value of all boxes with cakes. Help her determine this maximum possible total value.
Input

The first line contains two integers n and k (1 ≤ n ≤ 35000, 1 ≤ k ≤ min(n, 50)) – the number of cakes and the number of boxes, respectively.

The second line contains n integers a1, a2, …, an (1 ≤ ai ≤ n) – the types of cakes in the order the oven bakes them.
Output

Print the only integer – the maximum total value of all boxes with cakes.
Examples
input

4 1
1 2 2 1

output

2

input

7 2
1 3 3 1 4 4 4

output

5

input

8 3
7 7 8 7 7 8 1 7

output

6

Note

In the first example Slastyona has only one box. She has to put all cakes in it, so that there are two types of cakes in the box, so the value is equal to 2.

In the second example it is profitable to put the first two cakes in the first box, and all the rest in the second. There are two distinct types in the first box, and three in the second box then, so the total value is 5.

题意:把n个数分成k段,每段的价值等于这一段内不同数字的个数,求总的最大价值。

可以很快发现这是一个dp,dp[i][j]表示到第i个数字,已经分成了k段的最大价值。

dp[i][j] = max(dp[t][j-1]) (1<= t < i)

可以发现转移不是那么容易,所以我们用到线段树去维护当前位置前面的最大价值。

对于状态i,j,线段树维护的是1~i-1的最大值

对于每一个位置,找到前面最后一个与它数字相同的的位置,把这之间线段树的值都加上1,然后dp[i][j]的值就是j-1到i-1的最大值。

最后答案就是dp[n][k]。

(注意线段树的区间范围是0~n,因为可以直接从0转移过来)

#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>


using namespace std;


const int maxn = 45000;
int maxv[maxn*4];
int add[maxn*4];


void PushUp(int rt)
{
    maxv[rt] = max(maxv[rt*2],maxv[rt*2+1]);
}
void PushDown(int l,int r,int rt)
{
    if(add[rt])
    {
        int m = (l+r)/2;
        add[rt*2] += add[rt];
        add[rt*2+1] += add[rt];
        maxv[rt*2] += add[rt];
        maxv[rt*2+1] += add[rt];
        add[rt] = 0;
    }
}


void update(int x,int y,int c, int l, int r, int rt)
{
    if (x<=l && y>=r)
    {
        maxv[rt] += c;
        add[rt] += c;
        return;
    }
    PushDown(l,r,rt);
    int m = (l + r) / 2;
    if (x <= m)
        update(x, y, c, l, m, rt*2);
    if(y > m)
        update(x, y, c, m + 1, r, rt*2+1);


    PushUp(rt);
}


int query(int ll, int rr, int l, int r, int rt)
{
    if (ll <= l && rr >= r) return maxv[rt];
    PushDown(l,r,rt);
    int m = (l + r) / 2;
    int ret = 0;
    if (ll <= m)
        ret = max(ret,query(ll, rr, l, m, rt*2));
    if (rr > m)
        ret = max(ret,query(ll, rr, m + 1, r, rt*2+1));
    return ret;
}


int a[maxn],last[maxn],now[maxn];
int dp[maxn][55];


int main(void)
{
    int n,k,i,j;
    while(scanf("%d%d",&n,&k)==2)
    {
        for(i=1;i<=n;i++)
            scanf("%d",&a[i]);
        memset(now,0,sizeof(now));
        for(i=1;i<=n;i++)
        {
            last[i] = now[a[i]];
            now[a[i]] = i;
        }
        memset(dp,0,sizeof(dp));
        for(j=1;j<=k;j++)
        {
            memset(maxv,0,sizeof(maxv));
            memset(add,0,sizeof(add));
            for(i=1;i<=n;i++)
            {
                update(i,i,dp[i][j-1],0,n,1);
            }
            for(i=j;i<=n;i++)
            {
                update(max(last[i],j-1),i-1,1,0,n,1);
                dp[i][j] = query(j-1,i-1,0,n,1);
            }
        }
        printf("%d\n",dp[n][k]);
    }


    return 0;
}
检索后重排实战:BM25 + 轻量交叉编码器,零 Key 离线可跑(Python 源码) 检索后重排实战包。BM25 召回 + 轻量交叉打分精排,含 nDCG/MRR 评估;无 Key 离线可跑。含样例语料与 smoke。 立即下载

相关推荐

国央企创新负责人如何快速识别关键技术成果并推动落地?.docx

科易网基于AI模型+行业大数据,在技术转移、成果转化、技术经纪、知识产权、产业创新、科技招商等垂直领域的多样化应用场景,推出科技创新领域的AI+工具与数智化解决方案,推动科技创新与产业创新智能化发展。

Codeforces Round #426 (Div. 2) D. The Bakery(DP+线段树)

传送门 题意: 将一个含n个元素的数列分成k段,每一段的值为其中不同元素的个数,问k段字符和的最大值 思路: 1、dp[i][j] 表示到j为止分成i段的最大值, dp[i][j] = max(dp[i][j] , dp[i-1][x]+f(x+1,j)) (i-1; 2、容易想到从1到k枚举,关键是利用线段树实现 dp[i-1][x]+f(x+1,

survivorone的博客 465

三相电压型PWM整流器PI双闭环控制Matlab仿真

内容概要:本文档系统介绍了三相电压型PWM整流器的PI双闭环控制技术及其在Matlab/Simulink环境下的仿真建模方法,重点阐述了电流内环与电压外环的协同控制机制,旨在实现高功率因数、低电流谐波畸变及稳定的直流母线电压输出。内容涵盖多种典型电力电子变换器的建模与控制策略,包括三相维也纳(Vienna)整流器、双有源桥(DAB)变换器、LLC谐振变换器等,并深入探讨SVPWM调制、滞环电流控制、中点电位平衡、软开关技术、畸变抑制等关键技术。文档提供丰富的仿真模型、Mathcad计算书及参考文献,支持从基础控制结构到高级优化算法(如基于KKT条件的协同最小应力控制)的多层次研究与复现。; 适合人群:电气工程、自动化、电力电子与电力传动等相关专业的高校本科生、研究生,以及从事新能源发电、电动汽车、轨道交通等领域电能变换系统研发的科研人员与工程技术人员;要求具备Matlab/Simulink仿真基础及电力电子、自动控制理论的相关知识背景。; 使用场景及目标:①作为高校课程设计与实验教学的辅助材料,帮助学生掌握PWM整流器双闭环控制系统的设计流程与仿真方法;②支撑科研项目中对高性能整流器控制策略的验证、优化与EI级论文复现;③为工业界在新能源并网、车载充电机、直流配电系统等应用场景中的控制器开发提供仿真依据与参数设计工具;④结合Mathcad计算书实现不同功率等级与电压等级系统的自主建模与参数匹配。; 阅读建议:建议读者按照资源目录顺序循序渐进地学习,先掌握PI双闭环控制的基本架构与仿真调试方法,再逐步拓展至中点平衡控制、电网不平衡工况下的功率调节、软开关优化等高级主题;重点关注“顶级EI复现”案例以提升学术研究深度;推荐结合提供的仿真模型、计算书与参考文献进行对照分析与代码调试,强化理论与实践的融合能力。

Codeforces Round #426 (Div. 2) D. The Bakery

题目链接 给一个序列,要求把序列划分成k段,每一段里的权值是这一段里不同数字的个数。求如何划分使得k个区间的权值和最大。 我们容易想到dp[i][j]代表前j个分为i段时的最大值 dp[i][j] = dp[i-1][k] + size(k+1 , j) ( 0<=k<j ) //size(a,b)表示a到b这个区间里有多少个不同数字但是这显然是个二维的方程,比赛时怎么都

WeYoungg的博客 616

政府科技管理者如何实现科技成果与产业需求的精准匹配?.docx

科易网基于AI模型+行业大数据,在技术转移、成果转化、技术经纪、知识产权、产业创新、科技招商等垂直领域的多样化应用场景,推出科技创新领域的AI+工具与数智化解决方案,推动科技创新与产业创新智能化发展。

海康机器人ID5000 系列智能读码器(三)

又過了兩個月,漸漸的對這個攝像頭的功能更加熟悉了,而實際上,我要做的功能也越來越複雜,從一開始的讀碼,到後來的通過讀二維碼控制設備,再到未讀到二維碼控制設備等,下面就對具體的細項做一個總結。了解完這些就能對ID5000這個設備,乃至很多海康的設備都能做一個二次開發。

qq_54359036的博客 3072

Codeforces Round #426 (Div. 2) D. The Bakery(DP+线段树维护)

题目链接 给一个序列,要求把序列划分成k段,每一段里的权值是这一段里不同数字的个数。求如何划分使得k个区间的权值和最大。 我们容易想到dp[i][j]代表前j个分为i段时的最大值 dp[i][j] = dp[i-1][k] + size(k+1 , j) ( i-1<=k<j ) //size(a,b)表示a到b这个区间里有多少个不同数字 显然这是一题用线段树维护的二维d

qq_36782366的博客 330

暗黑破坏神2重制版 mod制作教程(一)

暗黑2重制版mod修改教程

hhhh2312的博客 7452

Codeforces Round #426 (Div. 2) D.The Bakery(区间dp+线段树优化+滚动数组)

题目 有一个长为n(n&lt;=3e5)的数列a[], 你可以把这n个数分成k(k&lt;=50)段, 每一段的价值是这一段内不同数字的个数, 求最大价值 思路来源 https://blog.csdn.net/mengxiang000000/article/details/76576435 题解 首先,想到一个区间dp的做法 dp[i][j]表示把分成i段的前j个值的最大价值, ...

小衣同学的博客 332

Labelme安装教程(附Anaconda安装教程)

本文详细介绍了如何安装Anaconda和Labelme,还提供了常见问题的解决建议。

HanYan_ing的博客 1万+

H.264 Profile与Level详解:如何为不同应用场景选择合适的编码配置

本文深入解析了H.264编码标准中的Profile与Level概念,指导开发者如何为不同应用场景选择合适的配置。文章对比了Baseline、Main和High三大Profile的特性与适用场景,并解释了Level如何限定视频的分辨率、帧率与码率上限。通过实战指南,帮助读者在视频通话、在线点播和专业制作等场景中,平衡画质、兼容性与性能,实现高效编码。

rgv2345678的博客 238

Codeforces Round #426 (Div. 2) D. The Bakery DP,线段树

题目链接:http://codeforces.com/contest/834/problem/D 题意: 把n个数分成k段,每段的价值等于这一段内不同数字的个数,求总的最大价值。 可以很快发现这是一个dp,dp[i][j]表示到第i个数字,已经分成了k段的最大价值 dp[i][j] = max(dp[t][j-1]) (1 对于状态i,j,线段树维护的是1~i-1的最大值 对于每一

I good vegetable a! 366

Hierarchical-Localization 环境配置与依赖管理全攻略

本文提供了Hierarchical-Localization(hloc)视觉定位工具箱从零开始的环境配置与依赖管理全攻略。针对Windows、Ubuntu和macOS三大操作系统,详细解析了Python版本选择、PyTorch与CUDA版本匹配、pycolmap版本锁定等核心依赖的安装步骤,并汇总了权重文件格式、NumPy版本、路径配置等常见问题的排查与解决方案,旨在帮助用户高效搭建稳定的hloc开发环境。

weixin_29066781的博客 335

Codeforces Round #426 (Div. 2)-The Bakery(线段树+DP)

D. The Bakery time limit per test 2.5 seconds memory limit per test 256 megabytes input standard input output standard output Some time ago Slastyona the Sweetmaid dec

信仰.的博客 642

【YOLOv11】006、YOLOv11数据增强策略:Mosaic、MixUp等增强技术原理解析

摘要:YOLOv11在产线缺陷检测中遇到小尺寸瑕疵漏检问题,暴露了训练数据过于"干净"的缺陷。数据增强的核心是提升模型泛化能力,而非简单扩充数据。Mosaic增强通过多图拼接迫使模型处理多尺度目标,需注意边界框裁剪细节;MixUp通过线性插值使决策边界更平滑,但需避免类别冲突。自适应增强策略应随训练进度动态调整强度。实际应用中,需针对小目标、类别不平衡等场景调整增强参数,并确保验证与推理流程一致。数据增强应针对性解决具体问题,而非盲目尝试组合。

企鹅码农的专属播客,分享10多年的实战案例和经验解读,包含YOLO、RT-DETR、AI等各个工作领域。 365

深入解析:使用Python进行T矩阵散射计算的完整指南

在物理学和工程学中,散射是一个至关重要的概念。当波(无论是光波、声波还是其他类型的波)遇到一个障碍物时,它会在多个方向上散开。为了理解和预测这种行为,我们需要进行数学建模和计算。其中,T矩阵方法是一种非常有效的工具。在开始计算之前,我们需要定义一些基础函数。"""计算T矩阵的一个元素。参数:- wave_vector: 波矢- scatterer_position: 散射体的位置- scatterer_properties: 散射体的性质(如大小、形状等)返回:- T矩阵的一个元素。

qq_38334677的博客 1054

Codeforces Round #426 (Div. 2) C. The Meaningless Game 思维 D. The Bakery dp

题目:http://codeforces.com/contest/834/problem/C 题意:两个人玩游戏, 两个人初始值都为1,每次可以选一个正整数,一个人乘以这个正整数的平方,一个人乘以这个正整数,给你多对数,判断会不会出现这个游戏局面 把ab乘起来,判断是不是一个数的三次方,并且是不是能被a和b整除 k^3==a*b&&a%k==0&&b%k==0 结果找k的二分写错了。。。。

jerans的博客 648

深入理解 Terraform 中的资源更新与管理

摘要:本文探讨Terraform处理AWS安全组名称变更时的行为。当修改不可变属性(如安全组名称)时,Terraform会创建新资源并删除旧资源。通过状态文件比对所需状态与实际状态,Terraform对不可变属性采用"先创建后删除"策略,对可变属性则直接更新。实例演示了修改安全组名称和关联EC2实例时的处理过程,强调理解资源属性可变性对基础设施管理的重要性。(149字)

2501_90323865的博客 471

Codeforces Round #426 (Div. 2) D. The Bakery(线段树维护dp)

题目链接:Codeforces Round #426 (Div. 2) D. The Bakery 题意: 给你n个数,划分为k段,每段的价值为这一段不同的数的个数,问如何划分,使得价值最大。 题解: 考虑dp[i][j]表示划分为前j个数划分为i段的最大价值,那么这就是一个n*n*k的dp, 考虑转移方程dp[i][j]=max{dp[i][k]+val[k+1][j]},我们用线段...

weixin_30508309的博客 113

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

Codeforces Round #426 (Div. 2) The Bakery 线段树+dp

题目链接 题意: 把n个数分成k段,每段的价值为这一段数里不同数字的个数,问价值和最大为多少。 思路: dp[i][j] 表示把前j个数分为i段的最大价值为多少,那么有如下转移方程: dp[i][j]=max(dp[i-1][k]+w[k+1][j]) (0 这个过程需要用线段树来维护一下,记录每一个a[i]的上一次出现的为止pre[i],那么我们每

Marcus-Bao的个人主页 520

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

Codeforces Round #426 (Div. 1):B. The Bakery

D. The Bakery time limit per test 2.5 seconds memory limit per test 256 megabytes input standard input output standard output Some time ago Slastyona the Sweetmaid dec

加载中... 711

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

Codeforces Round #426 (Div. 2) D. The Bakery 线段树优化DP

D. The Bakery Some time ago Slastyona the Sweetmaid decided to open her own bakery! She bought required ingredients and a wonder-oven which can bake several types of cakes, and...

weixin_30633949的博客 127

Codeforces Round #426 (Div. 2) D The Bakery(线段树 DP)

The Bakery time limit per test 2.5 seconds memory limit per test 256 megabytes input standard input output standard output Some time ago Slastyona the Sweetmaid decided to open...

weixin_34185364的博客 133

Codeforces Round #426 (Div. 2) D. The Bakery (线段树)

D. The Bakery time limit per test 2.5 seconds memory limit per test 256 megabytes input standard input output standard output Some time ago Slastyona the Sweetmaid decided to ...

weixin_30446197的博客 84
上一篇: Computer HDU - 2196 树dp
下一篇: Matching In Multiplication HDU - 6073 topsort+
sega_handsome
博客等级 码龄10年 7粉丝 164原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值