Codeforces Round #384 (Div. 2)E.Vladik and cards【二分+状压dp】(未敲)

双闭环PWM整流器VOC控制 +SVPWM调制仿真(Simulink仿真实现) 内容概要:本文详细介绍了基于Simulink平台构建的双闭环PWM整流器VOC(虚拟磁链定向控制)与SVPWM(空间矢量脉宽调制)相结合的仿真模型,系统阐述了三相电压型PWM整流器在电压定向控制策略下的建模方法与控制实现。通过设计外环直流电压控制与内环电流控制的双闭环结构,实现了对整流器的高功率因数运行、能量双向流动及动态性能优化的精确调控。结合SVPWM调制技术,有效提升了直流侧电压利用率并显著降低输出电流谐波含量,增强了系统的整体效率与稳定性。该仿真模型适用于新能源发电、电动汽车充电系统、微电网等高性能电能变换应用场景,文档还配套提供了丰富的学习资源与技术支持渠道,便于深入研究与工程实践。; 适合人群:面向电气工程、自动化、电力电子及相关专业的高校学生、科研人员以及从事新能源、智能电网、电力传动等领域研发工作的工程师;尤其适合已具备自动控制理论、电力电子变换技术和MATLAB/Simulink仿真基础的专业人士进一步深化学习与应用。; 使用场景及目标:①深入理解PWM整流器的工作机理及其双闭环控制系统的架构设计;②掌握VOC控制与SVPWM调制的协同工作机制,提升系统动静态响应性能;③支撑科研课题、课程设计、毕业设计或实际工程项目中的整流器控制系统开发与验证;④作为高级电能变换技术的学习范例,促进对现代电力电子系统控制策略的综合理解与创新能力培养。; 阅读建议:建议结合文中提供的百度网盘链接与公众号资源,下载完整的Simulink仿真模型进行实操演练,在MATLAB环境中调整控制器参数并观察仿真结果,深入剖析控制逻辑与系统响应特性;同时可参考同系列资源如PI双闭环控制、电网不平衡工况下的控制策略等案例,开展对比分析与拓展研究,全面提升系统建模与控制设计的综合能力。 立即下载

转自:http://blog.youkuaiyun.com/mengxiang000000/article/details/53695321
E. Vladik and cards
time limit per test
2 seconds
memory limit per test
256 megabytes
input
standard input
output
standard output

Vladik was bored on his way home and decided to play the following game. He tookn cards and put them in a row in front of himself. Every card has a positive integer number not exceeding8 written on it. He decided to find the longest subsequence of cards which satisfies the following conditions:

the number of occurrences of each number from 1 to8 in the subsequence doesn't differ by more then 1 from the number of occurrences of any other number. Formally, if there areck cards with numberk on them in the subsequence, than for all pairs of integers the condition|ci - cj| ≤ 1 must hold.
if there is at least one card with number x on it in the subsequence, then all cards with numberx in this subsequence must form a continuous segment in it (but not necessarily a continuous segment in the original sequence). For example, the subsequence[1, 1, 2, 2] satisfies this condition while the subsequence[1, 2, 2, 1] doesn't. Note that [1, 1, 2, 2] doesn't satisfy the first condition. 

Please help Vladik to find the length of the longest subsequence that satisfies both conditions.
Input

The first line contains single integer n (1 ≤ n ≤ 1000) — the number of cards in Vladik’s sequence.

The second line contains the sequence of n positive integers not exceeding8 — the description of Vladik’s sequence.
Output

Print single integer — the length of the longest subsequence of Vladik’s sequence that satisfies both conditions.
Examples
Input

3
1 1 1

Output

1

Input

8
8 7 6 5 4 3 2 1

Output

8

Input

24
1 8 1 2 8 2 3 8 3 4 8 4 5 8 5 6 8 6 7 8 7 8 8 8

Output

17

Note

In the first sample all the numbers written on the cards are equal, so you can’t take more than one card, otherwise you’ll violate the first condition.

题目大意:

给你一个长度为N的一个序列,需要我们找到一个最长的序列,保证每个元素(1~8)的个数之前的绝对值差小于等于1,而且对应选出来的序列中,需要保证相同的元素是连续的。

思路(补题真好玩系列0.0):思路来源于(http://www.cnblogs.com/Saurus/p/6183721.html);

1、首先我们很容易想到状压,我们肯定是状压8个数字的状态,其中1表示这个位子上的数已经选完了,0表示没有选完,那么我们在想dp数组的维度的时候,以及初算时间复杂度的时候,发现这个出现的次数一直是一个很难处理的点,那么我们首先对这个出现的次数进行优化:

①我们可以通过枚举来dp,每次枚举一个出现的次数,进行最大值的维护 ,我们不难想到:对应这个出现的次数越多,结果就可能越长,那么其具有单调性。

②对于可以枚举的具有单调性存在的变量,我们可以通过二分查找来进行优化。

2、那么我们每一次二分枚举出的当前值mid,表示本次二分枚举出来每个数将要出现的次数。

①对于当前值mid,每种数字出现的次数要么是mid次,要么是mid-1次。

②考虑dp,我们设定dp【i】【j】表示dp过程进行到第i位,对应j状态下的最多出现mid次的数字的个数。

③那么考虑状态转移方程:

如果我们直接暴力的话肯定时间复杂度是吃不消的,那么我们考虑调用一个vectormp;mp【i】用于存储数字i出现的各个位子,我们按照升序排列存储。

那么接下来:

④维护好每次二分情况的最大值即可。

Ac代码:

    #include<stdio.h>  
    #include<string.h>  
    #include<algorithm>  
    #include<vector>  
    using namespace std;  
    int a[100050];  
    int ans,n;  
    vector<int >mp[1050];  
    int cur[1050];  
    int dp[1050][1<<8];  
    int Slove(int mid)  
    {  
        int end=(1<<8);  
        for(int i=1;i<=8;i++)cur[i]=0;  
        memset(dp,-1,sizeof(dp));  
        dp[1][0]=0;  
        for(int i=1;i<=n;i++)  
        {  
            for(int j=0;j<end;j++)  
            {  
                if(dp[i][j]<0)continue;  
                for(int k=1;k<=8;k++)  
                {  
                    if(j &(1<<(k-1)))continue;  
                    if(mp[k].size()-cur[k]<mid-1)continue;  
                    dp[mp[k][cur[k]+mid-2]][j|(1<<(k-1))]=max( dp[mp[k][cur[k]+mid-2]][j+(1<<(k-1))],dp[i][j]);  
                    if(mp[k].size()-cur[k]<mid)continue;  
                    dp[mp[k][cur[k]+mid-1]][j|(1<<(k-1))]=max( dp[mp[k][cur[k]+mid-1]][j+(1<<(k-1))],dp[i][j]+1);  
                }  
            }  
            cur[a[i]]++;  
        }  
        int sum=-0x3f3f3f3f;  
        for(int i=1;i<=n;i++)sum=max(sum,dp[i][(1<<8)-1]);  
        if(sum<=0)return 0;  
        ans=max(ans,sum*mid+(8-sum)*(mid-1));  
        return 1;  
    }  
    int main()  
    {  
        while(~scanf("%d",&n))  
        {  
            for(int i=1;i<=n;i++)scanf("%d",&a[i]);  
            for(int i=1;i<=n;i++)mp[a[i]].push_back(i);  
            int l=2,r=n;  
            ans=0;  
            while(r-l>=0)  
            {  
                int mid=(l+r)/2;  
                if(Slove(mid)==1)  
                {  
                    l=mid+1;  
                }  
                else r=mid-1;  
            }  
            if(ans==0)  
            {  
                for(int i=1;i<=8;i++)if(mp[i].size()>0)ans++;  
            }  
            printf("%d\n",ans);  
        }  
    }  
让 Claude Code 接管 SAP 事务流, 用 Python 和 SAP GUI Scripting 做一个真正能干活的 AI Agent 摘要:SAP系统自动化面临的核心瓶颈在于繁琐的GUI操作而非分析能力不足。通过整合Claude AI、Python和SAP GUI Scripting技术,可构建能直接操作SAP界面的智能代理。该方案利用SAP官方提供的脚本接口,实现事务码执行、界面导航、数据提取等自动化操作,特别适用于DMLT过账引擎等复杂错误分析场景。相比传统SQL导出方案,这种GUI级自动化能处理树控件、ALV表格等复杂界面元素,且无需额外API开发,直接在现有SAP GUI会话上工作,在保持原有权限体系的同时显著提升效率。 阅读详情

相关推荐

【面试经验】京东-技术产品经理一面:从紧张到反思的全流程复盘

本文详细复盘了京东技术产品经理一面的全流程,从面试前的简历打磨、业务理解和技术基础准备,到面试中的高压对话和突发状况应对,再到面试后的深度反思与改进方案。文章特别强调了技术产品经理需要具备的技术理解力、数据敏感度和商业思维,并提供了实用的面试建议和准备技巧。

weixin_28730927的博客 162

【二分+状压DP】Codeforces743E[Vladik and cards]题解

题目概述给出一个序列 {An}\{A_n\} ,其中 Ai∈Z,Ai∈[1,8]A_i\in Z,A_i\in[1,8] ,求一个最大子序列,这个子序列满足: |numi−numj|≤1|num_i-num_j|\le 1 ,其中 numinum_i 表示 i∈Z,i∈[1,8]i\in Z,i\in[1,8] 的出现次数。 相同的数连在一起,不能出现断开的情况。如 1,2,11,2,1 是不合法的

ZigZagK的博客 528

告别License烦恼:手把手教你用VS Code+Cppcheck搭建免费的MISRA-C代码检查环境

本文详细介绍了如何使用VS Code和开源工具Cppcheck搭建免费的MISRA-C代码检查环境,帮助开发者规避商业工具的高额License费用。通过四步环境搭建和实战技巧,实现高效的代码静态检查,提升嵌入式开发的安全性和可靠性。

weixin_42523326的博客 247

CodeForces743E. Vladik and cards 二分+状压dp

这个题我们可以想象成_---___-----__的一个水柱它具有一遍优一遍行的性质因此可以用来二分最小值len,而每次二分后我们都要验根,we可以把这个水柱想成我们在每个数段里取前一段的那个数后一段有也不选,而且最后一个区间的第一个数一定可以使这个数区间对应的数,那么我们只要在某个位置上不选或选就可以啦,这we很容易想到2n的验根但是这样还不如打暴力,这时我们发现这个dfs是低效的他会很多进入等效...

weixin_30640291的博客 118

(53页PPT)新型智慧病房整体解决方案(附下载方式)

当前医疗场景存在三大核心矛盾:院内感染风险(如输液异常发现滞后)、信息孤岛现象(11类业务系统数据割裂)、管理效能不足(30%护理时间耗费在机械性工作)。实际案例显示,整体运营效率提升40%,患者满意度提高28个百分点,真正实现了"让技术有温度,让数据会说话"的价值理念。本文将从需求分析、技术架构、应用场景三个维度,深度剖析这份53页解决方案的创新价值与实践路径。床旁智能终端整合12项功能:包括体征自动采集(误差率<1%)、医嘱执行核对(100%条码校验)、智能床垫离床报警(响应时间3秒)等。

AI_data_cloud的博客 715

论文阅读《Eigen-GNN: A Graph Structure Preserving Plug-in for GNNs》

好久没看论文了,感觉好生疏 关于这篇文章的大致脉络,这篇文章已经介绍过了。

且视他人之疑目如盏盏鬼火,大胆地去走你的夜路 461

[CF 743E] Vladik and cards

题目 戳这洛谷 思路 似乎想到一个状态,感觉不甚靠谱。 正解: 似乎和我的思考有一些相似之处,然而我是把出现次数放进 dpdpdp 数组的状态里,这样是不好搞的,这就是我放弃自己思路的原因。 而题解里选择的方法是:直接二分这个最少的出现次数——似乎很可行? 定义 dp[i][j]dp[i][j]dp[i][j] :考虑前 iii 位,状态(即为数组出现的不可重集)为 jjj 可得到的最长序列长度。满足二分出来的最小长度 xxx。转移似乎很简单了,考虑 xxx 个和 x+1x + 1x+1 个就好了。 Cod

ICEEBBING的博客 239

Mac OS X 工具技巧:一文搞定个性化命令行窗口(iTerm2 + zsh + oh-my-zsh 配置Powerline风格)

本不想写这篇文章的,因为在Linux下已经配置过很多次,想着mac应该找篇文章一次就搞定了,结果还是踩坑,看了很多文章,不是某一点没不清楚,就是截图有问题或者命令有问题,官网又难得找等等……花了3个多小时才搞定,所以,还是来总结一篇文章就能够搞定的教程。 为什么要用zsh?用了这么多年的bash,不能说bash不好,不过当我用了zsh后发现,什么叫更好用。 配置过程稍微有点繁琐,但是你看过效果...

mickjoust的技术小屋 1万+

codeForces-743E Vladik and cards(状压+记忆化搜索+二分)

传送门:http://codeforces.com/contest/743/problem/E 题意:有n个元素的序列,每个元素均是[1,8]中的整数,要求找出他的最长子序列满足以下2个条件:①在这个序列中,[1,8]每个数字出现的次数之差的绝对值不超过1;②相同的数字必须连续.输出最长子序列的长度 题解:①对于每种数字保存他出现时的下标;②二分每种数字至少出现x次,因此每种元素可能出现的次数

十分残念的博客 748

全志D1s RISC-V开发板硬件设计与Linux启动全流程解析

RISC-V架构是当前国产嵌入式处理器演进的核心方向,其启动流程涵盖从BootROM、SPL到U-Boot及Linux内核的多级引导机制。理解该流程需掌握DDR初始化、设备树适配、电源时序控制等底层原理,技术价值在于构建可追溯、可调试、可量产的最小可行系统(MVS)。典型应用场景包括边缘AI推理终端、工业HMI和轻量级网关等对成本与开源性敏感的领域。本文以全志D1s平台为载体,深入剖析基于玄铁C906内核的RISC-V SoC在真实硬件上的启动验证、电源完整性设计与Linux全链路开源实践。

weixin_32306683的博客 358

【二分+乱搞】Codeforces 743E Vladik and cards

题面在这里发现子序列的长度是单调的,所以可以直接二分答案如果答案确定了,那么每个数字(1~8)(1\text{~}8)只能取⌊mid8⌋\lfloor \frac {mid} 8 \rfloor或⌊mid8⌋+1\lfloor \frac {mid} 8 \rfloor+1再8!8!暴力枚举一下8个数字出现的顺序然后直接乱搞就可以验证答案是否符合题意复杂度:由于加了很多剪枝,复杂度远小于O(nlog

linkfqy 666

项目管理知识体系(PMBOK)中的质量规划详解

你是否遇到过这些场景?软件上线后用户投诉“功能漏洞多”,团队连夜返工;装修完的房子墙面开裂,施工方和业主互相推诿;新研发的手机电池续航不达标,被迫延迟发布。这些问题的根源,往往是项目启动时没有做好质量规划。本文聚焦PMBOK中“质量规划”(Plan Quality Management)过程,覆盖其核心概念、操作步骤、工具技术与实战应用,适用于IT、建筑、制造等各类项目场景。

项目管理的博客 1117

【二分+状压dp】Codeforces Round #384 (Div. 2) E. Vladik and cards

【二分+状压dp】Codeforces Round #384 (Div. 2) E. Vladik and cards 【vj链接】 题目 Vladik was bored on his way home and decided to play the following game. He took n cards and put them in a row in front of hi...

xuziling_的博客 231

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

Vladik and cards的题解,应该算比较详细的#_#

题目来源:Codeforces Round #384 (Div. 2)E.Vladik and cards 题意:给定一个长度为n的序列,对于序列中的每个数ai均有1&lt;=ai&lt;=8,要求在此序列中找出一个最长的子序列,其满足性质:1.对于任意数字i,j的出现次数ci,cj,均有|ci-cj|&lt;=1;2.对于任意数字k在此子序列中一旦出现,则必须连续。       注意:当某一...

qq_41034353的博客 424

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

Codeforces Round #384 (Div. 2) E. Vladik and cards 状压dp

题目链接 http://codeforces.com/contest/743/problem/E 题面 Vladik was bored on his way home and decided to play the following game. He took n cards and put them in a row in front of himself. Every card ha...

c_czl的博客 158

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

E. Vladik and cards Codeforces Round #384 (Div. 2) 好题 二分+(贪心+状态压缩DP)判断

题意:给一串取值为1-8的序列,找出满足下列要求的最长子序列(不要求连续): 1.每个值出现的次数相差不超过1; 2.子序列中相同的值得出现在一起。 设满足要求的子序列数字出现次数至少为len。 性质: 1.子序列中出现次数至少为len,且有t个值出现len+1次,则长度为len*8+t; 2.若存在满足最少出现次数为len的子序列,则一定存在len-1的子序列(所有取值均丢掉一个即可

亂丟程式碼的天空 619

Codeforces Round #384 (Div. 2)E.Vladik and cards【二分+状压dp】

E. Vladik and cards time limit per test 2 seconds memory limit per test 256 megabytes input standard input output standard output Vladik was bored on his way home and decided to p

mengxiang000000 1028

Codeforces Round #384 (Div. 2) E. Vladik and cards

E. Vladik and cards题意有n长的序列(仅有1~8),问满足下列条件的最长子序列长度: 对于任意i∈[1,8] , j∈[1,8]i \in [1,8] \ , \ j \in [1,8], ∣ci−cj∣≤1\mid c_i - c_j \mid \le 1 ,其中ckc_k表示数字k出现的次数 任意数字若出现,则必须连续。example: [1,1,2,2] 满足条件2,[1,

DorMOUSENone的博客 680

E. Vladik and cards 二分+状态压缩dp Codeforces Round #384 (Div. 2)

1、这个题被我以前做的题迷住了,总是把我的思路带偏其实这个就是一个简单的二分。 2、我们在定状态的时候会发现很多的量我们没有办法统计,如果长度定的话我们还是很好的统计的。 3、dp[i][j] : 转载于:https://www.cnblogs.com/Heilce/p/7406785.html...

anp53732的博客 146

Codeforces Round #384 (Div. 2) 734E Vladik and cards

E. Vladik and cards time limit per test 2 seconds memory limit per test 256 megabytes input standard input output standard output Vladik was bored on his way home and ...

weixin_30767835的博客 96

CF743E Vladik and cards

一、题目 点此看题 二、解法 答案具有单调性,所以可以先二分,假设二分出来xxx,每个数要选xxx个或者x+1x+1x+1个,由于只有888个数,可以考虑状压。设dp[i][s]dp[i][s]dp[i][s]为考虑到第iii位,已经选出来的数状压为sss的最大额外长度(有多少个是x+1x+1x+1类型的),转移就找到从当前位置开始选某个数x/x+1x/x+1x/x+1次,到达的位置转移即可,预先处理一个表示位置的vectorvectorvector #include <cstdio> #inc

C202044zxy的博客 236
上一篇: Codeforces Round #449 (Div. 1) A. Nephren gives a riddle 模拟.
下一篇: BZOJ 4300: 绝世好题 动态规划
sega_handsome
博客等级 码龄10年 7粉丝 164原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值