cf 1312E dp中等题

从逻辑门到RISC-V指令:ALU设计实战与Verilog实现 本文详细介绍了从逻辑门到RISC-V指令集的ALU设计实战与Verilog实现方法。通过构建1位ALU并扩展至64位,深入解析了RISC-V指令集的算术逻辑单元实现技巧,包括加法器设计、零标志检测和溢出检测等关键功能。文章还分享了Verilog代码优化、流水线设计和常见问题调试的实用经验,为开发者提供了一套完整的ALU设计解决方案。 阅读详情

题目:数组里面相邻的且值同为x的两个数可以合成x+1,问数组的最小长度
input
5
4 3 2 2 3
output
2

思路难点:
意识到最终合成的结果是分截合成的,只要算出任意一截(从i到j)的顺序合成结果(此过程O(n2)),就能知道最终结果。

状态定义:
dp[i]表示前i个数可以合成的最小长度。

状态转移:
选择位置j,之前算出的dp[j]即是前j位的最小值,再将j到i位顺序合成。

for(int i = 1;i<=n;i++){
	for(int j = 1;j<i;j++){
		int t = 从j位到i位顺序合成的长度
		//计算t耗时O(n)
		dp[i] = min(dp[i],t+dp[j]);
	}
}

总复杂度O(n3)

可以如下优化:
可以顺序合成的值保存下来,定义t[i][j]为i到j顺序合成的最小长度,t[i][j]= t[i][j-1]合成第j位,在已知t[i][j-1]的情况下计算t[i][j]的复杂度为O(1)。在此基础上进一步可以做如下优化。

	for (int i = 1; i <= n; i++) {
		int t = 0;
		for (int j = i; j <= n; j++) {
			que[++t] = a[j];
			while (t != 0) {
				if (que[t] == que[t - 1]) {
					t--;
					que[t]++;
				}
				else break;
			}
			dp[j] = min(dp[j], dp[i - 1] + t);
		}
	}

复杂度O(n2)

ac代码:

#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <cmath>
#include <iostream>
#include <iomanip>
#include <string>
#include <algorithm>
#include <stack>
#include <queue>
#include <set>
#include <vector>
#include <map>

#define INF 0x3f3f3f3f
#define LINF 0x3f3f3f3f3f3f3f3f
#define ll long long
#define ull unsigned long long
#define uint unsigned int
#define l(x) ((x)<<1)
#define r(x) ((x)<<1|1)
#define lowbit(x) ((x)&(-(x)))
#define ms(a,b) memset(a,b,sizeof(a))
#define NSYNC std::ios::sync_with_stdio(false);std::cin.tie(0);std::cout.tie(0);

using namespace std;

int a[550], sta[550], dp[550],n;
int main() {
	scanf("%d", &n);
	for (int i = 1; i <= n; i++) {
		dp[i] = i;
		scanf("%d", &a[i]);
	}

	for (int i = 1; i <= n; i++) {
		int t = 0;
		for (int j = i; j <= n; j++) {
			sta[++t] = a[j];
			while (t != 0) {
				if (sta[t] == sta[t - 1]) {
					t--;
					sta[t]++;
				}
				else break;
			}
			dp[j] = min(dp[j], dp[i - 1] + t);
		}
	}
	printf("%d\n", dp[n]);

	return 0;
}
996引擎 - 读写变量性能测试 单轮100万次读写,取3轮平均耗时(毫秒),有效读取率均为100%,数值越小性能越优。 阅读详情

相关推荐

盘点天才少年稚晖君彭志辉的知识体系

一个杰出工程师的工作区间和装备

曲折旅程,艰难人生 2万+

cf 1312E(区间DP

cf 1312E(区间DP 题意: 给n个数,每次选两个相等且相邻的数合并变成ai+1a_{i+1}ai+1​,问最小长度 思路: 范围显然区间dpdpdp,我们考虑到对于某个区间来说,如果能压成一个数的话,这个值必定是唯一的 若能知道哪些区间能被压成1个数字的话,我们就可以通过线性dp直接求解 所以我们用dp[i][j]dp[i][j]dp[i][j]表示将区间[i,j][i,j][i,j]压成一个数字后的数字,0的时候说明无法成功,转移就是正常区间dpdpdp的转移了 再之后就是一个非常裸线性dpdpd

weixin_45539557的博客 376

双摄像头的实时视频拼接及目标跟踪(一)

本章主要讲图像拼接算法的研究 先膜拜一下知乎大佬全面的叙述:https://www.zhihu.com/question/34535199/answer/135169187 本文图像拼接是基于opencv的图像拼接,流程分为以下几步 ...

Y.W.jian的博客 3万+

CF1312E Array Shrinking

一、题目 点此看题 二、解法 如果一个区间能化成一个数,那么这个数是固定的,我们可以用区间dpdpdp的方式O(n3)O(n^3)O(n3)地把它算出来。 然后问题就变成了前iii个数化成最少的段,使每个段都能化成一个数,暴力dpdpdp是O(n2)O(n^2)O(n2)的。 #include <cstdio> #include <iostream> using namespace std; const int M = 505; int read() { int x=0,fl

C202044zxy的博客 226

RcisTarget实战:从差异基因到转录因子调控网络的完整分析流程(附代码)

本文详细介绍了RcisTarget工具在转录因子调控网络分析中的完整流程,从差异基因到motif富集分析,再到结果可视化与生物学解读。通过实战代码演示,帮助研究者掌握这一强大的R包应用,揭示基因表达背后的调控机制,特别适用于基因组学和生物信息学研究。

weixin_29214199的博客 228

[cadence]Allegro STEP-3D模型导入、匹配、导出的方法及注意事项

如果 Avaliable里面没有和symbols对应的文件,说明没有对应的3D模型,这时候需要在你的step路径下创建y与 .dra 封装文件相同名称的。选择好 Output file 和 name 之后呢,点击 Export。首先打开Setup - Step Package Mapping。注意:路径中不能有中文名称,有的话你会发现不能导出,也不会报错。在路径下将下载或者自己做的 3D模型文件改名之后,重新打开。可在View -> 3D View。

LuDvei的博客 2万+

CF1312E Array Shrinking(区间dp模板)

题目链接(洛谷) CodeForces 这是一道区间dp的板题 题意 给定一个数组,每一次对于两个相邻的数,如果他们相等,则可以将它们合并为一个数,其值为原数+1+1+1,求原数组合并完后的最小长度。 思路 首先看到这种描述,我们就可以想到区间dp 区间dp的模板:dp[i][j]=min⁡(dp[i][k]+dp[k+1][j]+w[i])(w[i]随题目改变)区间dp的模板:dp[i][j] = \min(dp[i][k] + dp[k + 1][j] + w[i])(w[i]随题目改变)区间dp的模板

Exploration 1100

Unity UI适配核心:Canvas Scaler模式解析与2023版避坑指南

UI适配是游戏与应用开发中的基础挑战,其核心在于确保界面元素在不同屏幕分辨率与设备上保持视觉一致与功能可用。原理上,系统通过坐标转换与缩放计算,将设计稿的布局映射到物理屏幕。技术价值在于提升用户体验的一致性与产品的跨平台兼容性。应用场景广泛覆盖手游、PC端应用及各类交互界面。本文聚焦Unity引擎中的Canvas Scaler组件,深入剖析其Scale With Screen Size等模式的工作原理,并结合锚点设置、安全区域处理等高频搜索热词,提供解决UI错位、拉伸及异形屏适配等常见问题的工程实践方案,帮

weixin_30920597的博客 622

CF1312 E. Array Shrinking (区间dp)

一道(对我来说)比较迷的区间dp,后来看到大佬的题解才明白是怎么回事 首先为什么判定是区间dp呢? 一是看数据在500以内,暗示时间复杂度 n^3; 二是存在明显的区间合并操作:左右相等后合并为一个数+1(something) 我们都知道传统的区间dp写法是这样的 for(int len = 1;len<=n;len++){//枚举长度 for(int j = 1;j+len...

naiue的博客 453

别再凭感觉选电容了!手把手教你计算电机控制器里的母线电容(附Excel计算工具)

本文详细解析了电机控制器中母线电容的选型方法,从理论计算到工程实践,帮助工程师避免常见误区。通过精确计算纹波电压、电容容量等关键参数,并结合薄膜电容与电解电容的性能对比,提供实用的选型建议。附带的Excel计算工具可快速完成参数计算,适用于工业伺服驱动和电动车电机控制器设计。

weixin_28720573的博客 518

星网锐捷语音网关密码重置全攻略:两种高效恢复出厂设置方法详解

本文详细解析了星网锐捷语音网关密码重置的两种高效方法,包括通过eth1通用口和eth0管理口的操作步骤。针对不同型号设备,提供硬件连接、Web控制台登录及CRT工具使用的具体指南,帮助用户快速恢复出厂设置并重建语音环境配置。

weixin_28698059的博客 528

CF467C George and Job (DP)

Codeforces Round #267 (Div. 2) C. George and Job time limit per test 1 second memory limit per test 256 megabytes input standard input output standard output The new IT...

weixin_34320159的博客 161

ROS2仿真抓取分拣案例,使用myCobot 280机械臂结合ROS2系统搭建机械分拣站

本案例展示了如何利用myCobot 280 urdf模型构建一个对象分类站,并在ROS2 jazzy中完成运动规划。

m0_71627844的博客 2125

CF1312E. Array Shrinking(线性DP)

题目链接:https://vjudge.net/contest/373875#problem/I 题意:相邻两个一样的数a可以合并成为一个a+1,问合并后的最短长度 解题思路: dp[i][j][0]表示i到j是否被合并 dp[i][j][1]表示i到j合并后的值 dp主体部分: void DP() { for(int k=1;k<=n-1;k++){ for(int i=1;i+k<=n;i++){ for(int j=i;j<=i+k-1;j++){ if(dp[i]

Buyi的博客 1061

android 蓝牙通讯demo

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

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

【CF1312E】Array Shrinking(dp)

传送门 题目: 思路: 数组中的某些数可以通过执行多次题目中的操作最终归为1个数。 先确定每个r(1≤r≤n)r(1≤r≤n)r(1≤r≤n)有哪些l(1≤l≤r)l(1≤l≤r)l(1≤l≤r)满足[l,r][l,r][l,r]内的数可以归为1个数。在处理的时候可以先枚举lll,这样rrr每次都只增加1。且[l,oldr][l,oldr][l,oldr]的结果已知,[l,newr][l,ne...

Cassie_zkq的博客 472

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

cf1312E. Array Shrinking

dp

ACoder 225

假人有限元模型

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

CF每日3题(1500-1700)

阿诺练算法,百日则肥白。

头顶尖尖的博客 1015

[CF1312E]Array Shrinking

还有什么事是一次dp解决不了的呢?如果有,就再做一次dp。

七代目鸽影 292

记录一些CF-DP题(qwq)

CodeForces 1195C Basketball Exercise 题意:有两排小哥哥,每排都有nnn个小哥哥。我们要从这2n2n2n个小哥哥里选择任意个,使得这些小哥哥的身高总和最大(花痴脸). 限制我们选择的小哥哥不能是一排中相邻的两个。 思路:定义dp[ ][3]dp[ \ ][3]dp[ ][3]其中dp[pos][0]dp[pos][0]dp[pos][0]表...

L_X_ 405

cf1312E

可以合并时( 当f[i][k]==f[k+1][j] && g[i][k]==1&&g[k+1][r]==1 )区间dp,f[i][j]表示某区间的合成值,g[i][j]表示某区间最终的序列长度。那么直接开始区间dp的套路,考虑[i,j]分割为 [i,k],[k+1,j]不合并时 应该取g[i][j]=min(g[i][k],g[k+1][j])有f[i][j]=f[i][k]+1 , g[i][j]=1。对两个相等的相邻元素 ,合并为a[x]+1。问最后剩余序列的最小长度。

chromosome24k的博客 102

NOI金牌冲刺day9

CF训练 CF1348F 只需考虑能否交换两个数 CF1334F 线段树,DP转移 CF1332F树形DP CF1327F DP,前缀和优化 CF1326F DP,拆分树 CF1325E 找环,dfs cf1320D 线段树,维护字符,删除对 CF1312G线段树维护DP 模块训练八:SAM后缀自动机 P4112 SAM,序列,自动机 CF700E 后缀自动机,线段树合并,结论 ATCODER GROUND 只做出来两道题,不理想 ...

woshitiancai100的博客 264

解锁codeforces-go:从入门到精通的区间DP与环形DP实战指南

在算法竞赛的世界里,动态规划(DP)是解决复杂问题的核心武器之一。而codeforces-go作为一个全面的算法竞赛模板库,为开发者提供了丰富的DP实现方案。本文将深入解析codeforces-go中的区间DP与环形DP技术,帮助你掌握这两种高级DP技巧,轻松应对各类算法挑战。 ## 区间DP:优雅解决区间最优问题 区间DP是一种针对区间问题设计的动态规划方法,其核心思想是将大区间分解为小区间

gitblog_00114的博客 419

cf dp 2000分 乱刷

dp

m0_65929214的博客 172

一些干净的DP题目

Making the Grade 给一个长为n(n<2000)的序列A,将其变成一个非增或非减的序列B的绝对值改变量。 key:B中所有的数都是A中的数。因为若al<b<ara_l<b<a_ral​<b<ar​时,总能令b变成其中一个值。则枚举bib_ibi​为每个A中的值即可。dp[i][j]表示bi≤unqjb_i≤unq_jbi​≤unqj​时,目前的最小代价。 // #include<bits/stdc++.h> #include<ios

Mr.chen116的博客 480

ACM学习总结(七)(21.4.24)

区间DP

weixin_51443397的博客 337

CF1400:1320A(小思维)、1312C(思维)、289B(绝对值)、1201C(模拟)

1320A. Journey Planning(小思维) 题意: 给定一个数列ai。 从中找一个子序列,满足i>j, i-j=a[i]-a[j]。 这样的子序列和最大为多少? 思路: 满足i-j=a[i]-a[j],即满足i-a[i]=j-a[j]。 然后map记录值相同的总和。取最大。 就是一个简单的公式变形,一开始还想着暴搜,dp。。 Code: const int N = 200010, mod = 1e9+7; ll T, n, m, a[N]; ll sum,ans; bool f[N];

Mr_dimple的博客 707
上一篇: cf 1312 D 逆元模板
下一篇: poj 1112 经典最小差值dp(超级好题)
FawkesLi
博客等级 码龄8年 21粉丝 170原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值