CodeForces - 834D(线段树优化dp)

粗粒化模拟入门:从概念到实操的最简教程 在计算模拟领域,多尺度建模是衔接微观细节与宏观现象的关键桥梁,而粗粒化正是其中最具工程实践价值的降维方法。其核心原理并不神秘——受“买菜算账”思维的启发,将原子按角色合并为珠子,在保留体系核心相互作用的同时削减自由度,从而显著提升计算效率。这种“丢细节、留本质”的建模思想,不仅让膜蛋白自组装、高分子链缠结等长时大尺度问题变得可模拟,也广泛应用于图像压缩、机器学习特征降维等跨学科场景。本文面向分子模拟入门者,从全原子与粗粒化模型的差异讲起,逐步拆解坐标映射、珠簧模型构建及参数化要点,并给出避坑清单与实战建议, 阅读详情

给你长度为N的一个序列,让你将其分成连续的k段,每段的价值为其中数字种类的个数,求最大价值总和。

 

首先能想到n^2复杂度的dp

设定dp[i][j]表示到位子i,分成j段的最大价值总和。

dp[i][j]=max( dp[i][j],dp[k][j-1]+val(k+1,i) );k为这个数上一次出现的位置

可以用线段树加速转移。

考虑val(k+1,j).

我们遍历到第j个位子的时候,我们显然树上第k个位子表示的是dp[k][j-1]+val(k+1,i),那么考虑第i个数,它会对区间

(pre[a[i]] ,i-1)区间内的树上的位子有所影响。

那么我们遍历到第i个位子的时候,将树上区间(pre[a[i]],i)的值都+1。

这里pre[a[i]]表示的是a[i]这个数上一次出现的位子。

#include<bits/stdc++.h>
using namespace std;
const int maxn = 35555;
int a[maxn<<2],n,k;
int delt[maxn<<2],pre[maxn],pos[maxn];
int dp[maxn][52];
void pushup(int rt)
{
    a[rt]=max(a[rt*2],a[rt*2+1]);
}
void pushdown(int rt)
{
    delt[rt<<1]+=delt[rt];
    delt[rt<<1|1]+=delt[rt];
    a[rt<<1]+=delt[rt];
    a[rt<<1|1]+=delt[rt];
    delt[rt]=0;
}
void update(int rt,int x,int y,int l, int r, int val)
{
    if (x<=l&&r<=y)
    {
        a[rt]+=val;
        delt[rt]+=val;
        return;
    }
    pushdown(rt);
    int mid=(l+r)>>1;
    if (x<=mid)
        update(rt<<1,x,y,l,mid,val);
    if(y>mid)
        update(rt<<1|1,x,y,mid+1,r,val);
    pushup(rt);
}
int query(int rt,int x,int y,int l,int r)
{
    if (x<=l&&r<=y) 
	return a[rt];
    pushdown(rt);
    int mid=(l+r)>>1;
    int ans=0;
    if(x<=mid)
        ans=query(rt<<1,x,y,l,mid);
    if(y>mid)
        ans=max(ans,query(rt<<1|1,x,y,mid+1,r));
    return ans;
}

int main()
{
	while(~scanf("%d%d",&n,&k))
	{
		memset(pos,0,sizeof(pos));
		for(int i=1;i<=n;i++)
		{
			int x;
			scanf("%d",&x);
			pre[i]=pos[x];
			pos[x]=i;
		}
		memset(dp,0,sizeof(dp));
		for(int i=1;i<=n;i++)
		{
			dp[i][1]=dp[i-1][1];
			if(!pre[i]) dp[i][1]++;
		}
		for(int j=2;j<=k;j++)
		{
			memset(a,0,sizeof(a));
			memset(delt,0,sizeof(delt));
			for(int i=1;i<=n;i++)
			update(1,i,i,1,n,dp[i][j-1]);
			
			for(int i=j;i<=n;i++)
			{
				update(1,pre[i],i-1,1,n,1);
				dp[i][j]=query(1,j-1,i-1,1,n);
			}
		}
		printf("%d\n",dp[n][k]);
	}
	return 0;
}

 

 

 

YOLOv8 TensorRT C++部署实战详解:从XMake构建到推理流水线 本项目实现了一个基于YOLOv8和TensorRT的高性能火灾烟雾检测系统,具有以下核心特点: 技术架构:采用TensorRT 8.6+进行GPU加速推理,结合CUDA 12.1和OpenCV 4.8+,实现高效计算机视觉处理。系统使用XMake替代CMake构建,配置更简洁高效。 阅读详情

相关推荐

手把手教你用STM32硬件SPI驱动BMI088陀螺仪(附完整代码)

本文提供了一份详尽的STM32硬件SPI驱动BMI088陀螺仪的实战指南。内容涵盖从硬件连接、SPI底层配置、驱动层封装到设备初始化、数据读取与同步策略,并深入探讨了数据处理、滤波融合及温度补偿等核心技巧,旨在帮助开发者构建稳定高效的IMU驱动框架,解决BMI088应用中常见的挑战。

quiet的专栏 529

Codeforces 834D 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 decided to op

mengxiang000000 1526

华为海思IC设计岗位笔试全解析:物理、电路与工艺三大方向备考指南

本文全面解析华为海思IC设计岗位笔试的物理、电路与工艺三大方向备考要点。针对物理设计方向,重点讲解半导体能带理论、载流子输运机制等核心考点;电路设计方向涵盖Verilog语法、UVM验证等关键技术;工艺方向则深入探讨FinFET工艺、光刻技术等前沿知识。提供高效备考策略和应试技巧,助力考生提升通过率。

weixin_29196613的博客 1085

Codeforces-1487 E. Cheap Dinner(线段树优化DP)

思路: 定义dp[i][j]dp[i][j]dp[i][j]代表第iii次用餐中,选到了第jjj个物品能得到的最小价值和。 就是每一层维护的dp数组用线段树表示,那么限制就是这一层的每个数与之前一层有一些数不能匹配,那么限制就是这一层的每个数与之前一层有一些数不能匹配。 不能匹配的数将数组划分为了很多区间,转移就是你在这些区间中之间取最小值加上当前这个数的权值 #include <cstdio> #include <cstring> #include <algorithm&g.

tomjobs的博客 763

保姆级教程:用Arduino+MPU6050自制寻北仪(附MEMS陀螺精度测试报告)

本文提供了一份详细的Arduino与MPU6050自制寻北仪的保姆级教程,包括硬件选型、卡尔曼滤波算法优化、地磁场补偿及真北计算等关键技术。通过实测数据展示了MEMS陀螺仪在民用领域的高精度性能,帮助读者低成本实现1°以内的寻北精度。

weixin_42522964的博客 364

【Java】对接微信转账到零钱接口 Java微信商家转账 apiV3(该踩的雷都踩了)

配置apiv3依赖java代码。

Moonhwa的博客 4318

Codeforces Round #587 (Div. 3)_F_DP线段树优化

题目链接:https://codeforces.com/contest/1216/problem/F 解题思路: 代码: //f[i][0]:对于第i个位置我们不放路由器,并且让1 - i所有为止都连接到网络 //f[i][1]:对于第i个为止我们要放路由器,并且让1 - i所有位置都连接道网络 // //f[i][0] = min(f[i - 1][0] + i, f[i - k --- i...

phacpf123 175

【STM32】CubeMx系列教程之移植FreeRTOS

本文详细介绍了在STM32F429上通过CubeMX工具移植FreeRTOS的方法。主要内容包括:1)配置系统时钟源,将TIM1替换SysTick作为时钟基准;2)FreeRTOS的创建与配置,包括任务创建、堆栈大小设置等;3)关键配置参数说明,如堆大小建议设为RAM的50%-70%;4)常用函数如堆栈监控、任务挂起/恢复等。文章提供了从基础配置到深入优化的完整移植指南,适合STM32开发者参考使用。

JackieJin123的博客 787

Codeforces 944G Coins Exhibition 线段树优化dp

题意 有一个长度为k的01串,有n个形如[l,r]的限制表示区间[l,r]内至少有一个0,m个限制[l,r]表示区间[l,r]内至少有一个1,问合法01串数量。 k≤109,n,m≤105k\le10^9,n,m\le10^5k≤109,n,m≤105 分析 先把坐标离散化,设离散后的坐标iii对应原来的坐标为lil_ili​,。 考虑dp,设dp0/1[i][j]dp_{0/1}[i][j]dp...

beginend 342

Anki小白必看:手把手教你打造高颜值个性化笔记模板(附Leaflyer模板下载)

本文为Anki新手提供详细的个性化笔记模板设计指南,从基础配置到高级定制技巧,帮助用户打造高效记忆系统。特别推荐Leaflyer模板下载,通过视觉优化和功能强化,显著提升学习体验和记忆效率。

weixin_28717969的博客 433

EndNote X9 参考文献附录列表 格式调整

EndNote X9 插入参考文献常见问题总结

程序员,他们想的是什么?他们想的永远都是技术,他们崇尚的也永远都是技术。 2570

CodeForces 834D :The Bakery 线段树优化DP

传送门 题意 将一个长度为nnn的序列分为kkk段,使得总价值最大。 一段区间的价值表示为区间内不同数字的个数。 分析 我们用f[i][j]f[i][j]f[i][j]表示前iii个蛋糕分配在jjj个篮子里面 的最大价值,那么不难列出状态方程 f[i][j]=max(f[p][j−1]+val(p+1,i))f[i][j] = max(f[p][j - 1] + val(p + 1,i))f[i][j]=max(f[p][j−1]+val(p+1,i)) 所以我们需要做的就是在lognlognlogn的时间

tlyzxc的博客 251

智算中心建设项目初步设计方案

本项目面向区级政府、智算中心及文旅从业者,聚焦某区智算中心一期建设,响应数字经济与智慧城市建设政策,推动文旅产业升级。遵循统筹规划、数据驱动原则,目标打造智慧文旅样板。建设内容涵盖云网数据底座(以租代建)、数据中台(全生命周期管理)、智慧文旅平台(含“一机游”电商)及气象监测等配套,采用前后端架构与低代码开发,强化三级等保与纵深防御,实现安全可控。方案融合多类资源目录,提供从设计到运营的完整技术支撑,助力区域智算与文旅深度融合。

cdfunlove的博客 111

Codeforces 834D The Bakery 线段树优化DP

传送门:Codeforces 834D 题意:给定一个序列,将其分成k段,每段的值定义为其中不同数的个数,问怎么分能使总值最大。 思路:dp[i][j]表示将前j个数分成i段能得到的最大值。显然dp[i][j] = max(dp[i - 1][k - 1] + num[k, j])(1 暴力枚举的话是k * n^2的,显然不行,考虑优化取max的过程,可以用线段树维护,记录每个数和它前一个数

WA是一笔财富 414

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

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

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

Codeforces 834D The Bakery 【线段树优化DP】*

Codeforces 834D The Bakery LINK 题目大意是给你一个长度为n的序列分成k段,每一段的贡献是这一段中不同的数的个数,求最大贡献 是第一次做线段树维护DP值的题 感觉还可以,虽然看了一下这题是用线段树维护DP值 然后说思路 有一个很显然的思路是这样的: dpi,jdpi,jdp_{i,j}表示前i个数分成j段的最大贡献 dpi,j=max(dp...

Dream_maker的博客 303

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

codeforces CF834D CF833B The Bakery 线段树优化DP

$ \Rightarrow $ 戳我进CF原题 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 ...

ayf1988的博客 222

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

Codeforces-834D The Bakery 线段树优化DP

给n个数,让你分成k个子段,让每个子段中不同数字个数的和最大 dp[i][j]:前i个元素分成j段的最大和 考虑第j段,他的开头为k,那么dp[i][j]=max{dp[k][j-1]+sum[k+1][i] | 0 节点i维护dp[k]+sum(k+1,i),0 #include #include #include #include #include #include #includ

Dream in the Night 396

CodeForces 834D The Bakery(线段树优化DP)

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 exp...

weixin_30922589的博客 162

The Bakery CodeForces - 834D (dp+多颗线段树优化)

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...

untilyouydc 244

Codeforces 834D The Bakery (线段树+DP+单调性质)*

题目链接:https://cn.vjudge.net/problem/CodeForces-834D #include&lt;bits/stdc++.h&gt; #pragma comment(linker,"/STACK:1024000000,1024000000") using namespace std; #define debug puts("YES"); #define rep(x...

满月照亮的路 263

2019暑假集训 8/3

学习内容:线段树加速DP和多校补题 今日完成题数(不包含多校):4 /*多校补题情况(之前定的每支队伍标准):✔*/ 今日看书情况:无 学习算法的总结 线段树加速DP 今日做题总结 cf 834D 线段树加速dpf[i][j]=maxf[k][j−1]+diff(k+1,i)f[i][j]=maxf[k][j−1]+diff(k+1,i),k∈[j−1,i−1]k∈[...

weixin_30553777的博客 93

Codeforces 834D The Bakery【Dp+线段树】

题意 : 给你n个数让你划分成k个部分,每个部分对答案的贡献为这个部分不同数字的个数。问你答案最大为多少? 题解 : 拿过这道题目我们不难想到动态规划做法,用dp (i,j) 表示前i个分成j部分最大答案是多少。则dp的状态转移方程为dp (i,j) = max (dp(x,j - 1) + diff (x + 1,i)); 但是这个状态转移方程的时间复杂度是 n^3 * k的显然是不可

Glory 的 博客 407
上一篇: POJ-1741Tree(树分治模板)
下一篇: POJ-2152 树形dp
GoLakerswxy
博客等级 码龄9年 41粉丝 158原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值