csp2024T3

题目大意:对于每个数而言,可以将其染成红或蓝,对于每一个数,定义其贡献为ai,当且仅当这个数最近的同色数与其相等,否则其贡献为0,求最大贡献和。

思路:考虑dp

1.考场20多分钟想的奇怪东西:

定义f[n][0/1]表示第i为的颜色为蓝或红,则有转移:f[i][0]=f[j][0]+(a[i]==a[j])*a[i]+calc(j+1,i-1,1)

f[i][1]=f[j][1]+(a[i]==a[j])*a[i]+calc(j+1,i-1,0)

问题出在calc中,当时想的是sum=\sum_{st}^{ed}f[i][cl]就是他的值。但其实拿那个样例比对一下,就能发现sum=f[st][cl]+sum_{st+1}^{ed}(a[i]==a[i-1])*a[i],对于最左边的数,它的贡献是f[st][cl],其他点就是把相邻两个数的值相等的贡献加起来。注意到如果相邻两个相同数被染成同样的颜色,那么应该是f[st-1][cl](一定要拿特殊数据测一测,否则只有5pts)。

2.O(n^2)呼之欲出,维护前缀和q[i]表示前i位的calc值,那么calc(j+1,i-1)=q[i-1]-q[j+1+1-1]=q[i-1]-q[j+1]

q[i]=a[i]*(a[i]==a[i-1])

q[i]+=q[i-1]

#include<bits/stdc++.h>using namespace std;const int N = 1e6 + 10;int f[N],n,a[N],ans;int calc(int st,int ed){int ans=f[st];if(st>ed&&st-1>=1)  return f[st-1];if(st==ed)  return f[st];for(int i=st+1;i<=ed;i++)  ans+=(a[i]==a[i-1])*a[i]; return ans;
}
void solve(){memset(f,0,sizeof f);cin>>n;for(int i=1;i<=n;i++)  cin>>a[i];for(int i=2;i<=n;i++){f[i]=f[i-1];int sum=0;for(int j=i-1;j>=1;j--){//if(a[i]!=a[j])  continue;int st=j+1,ed=i-1;//st+1 - edif(st>ed&&st-1>=1)  f[i]=max(f[i],(a[i]==a[j])*a[i]+f[st-1]);else if(st==ed)  f[i]=max(f[i],(a[i]==a[j])*a[i]+f[st]);else if(st<ed){sum+=(a[j+2]==a[j+1])*a[j+1];f[i]=max(f[i],(a[i]==a[j])*a[i]+sum+f[st]);} //f[i]=max(f[i],(a[i]==a[j])*a[i]+calc(j+1,i-1));}}cout<<f[n]<<endl;
}
int main(){int T;cin>>T;while(T--)  solve();return 0;
}

考虑优化:很明显只有相等的值才能造成贡献

策略1.两位相邻,f[i]=max(f[i],(a[i]==a[i-1])*a[i]+f[i-1]);

策略2.两位之间差一位,f[i]=max(f[i],(a[i]==a[i-2])*a[i]+f[i-1]);

策略3.两位之间的格子超过两位,f[i]=max(f[i],a[i]+q[i-1]-q[t+1]+f[t+1]);

其中t表示其中与其相同值的格子的位置。

直接分类是接近O(n^2),考虑-q[t+1]+f[t+1]的单调性,可以知道这是单调递增的,每次以上次最后点为起点,t>i-3是为下一个点的起点和这个点的终点即可。

复杂度O(n),当然没看出单调性也可以套个线段树维护后面那个东西,本题不卡常。

#include<bits/stdc++.h>
#define int long long
using namespace std;const int N = 1e6 + 10;int f[N],n,a[N],ans,q[N],mx,g[N],maxn,lst[N];
vector<int> v[N];
void solve(){memset(f,0,sizeof f);memset(q,0,sizeof q);maxn=0;memset(g,0,sizeof g);memset(lst,0,sizeof lst); cin>>n;for(int i=1;i<=n;i++){cin>>a[i];maxn=max(maxn,a[i]);if(a[i]==a[i-1])  q[i]=a[i];q[i]+=q[i-1];v[a[i]].push_back(i);}  for(int i=2;i<=n;i++){f[i]=f[i-1];int sum=0;f[i]=max(f[i],(a[i]==a[i-1])*a[i]+f[i-1]);if(i>2)  f[i]=max(f[i],(a[i]==a[i-2])*a[i]+f[i-1]);for(int j=lst[a[i]];j<v[a[i]].size();j++){int t=v[a[i]][j];if(t>i-3){lst[a[i]]=j;break;}  f[i]=max(f[i],a[i]+q[i-1]-q[t+1]+f[t+1]);}}cout<<f[n]<<endl;for(int i=1;i<=maxn;i++)  v[i].clear();
}
signed main(){int T;cin>>T;while(T--)  solve();return 0;
}

summary:自己的t2很蒙,搞到t3只有1个小时多一点,实际想这一题只有30-40分钟,没有自己仔细调一调,导致暴力dp都没有写出来。希望noip能自己写出一个正解dp出来

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/3598.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

Leetcode 198. 打家劫舍 动态规划

原题链接&#xff1a;Leetcode 198. 打家劫舍 class Solution { public:int rob(vector<int>& nums) {int n nums.size();if (n 1)return nums[0];int dp[n];dp[0] nums[0];dp[1] max(nums[1], nums[0]);for (int i 2; i < n; i) {dp[i] max(dp[i - 2] num…

Spring源码学习(五):Spring AOP

免责声明 本人还处于学习阶段&#xff0c;如果内容有错误麻烦指出&#xff0c;敬请见谅&#xff01;&#xff01;&#xff01;Demo <dependency><groupId>org.aspectj</groupId><artifactId>aspectjweaver</artifactId><version>1.8.8<…

外包干了6年,技术退步明显.......

先说一下自己的情况&#xff0c;大专生&#xff0c;18年通过校招进入杭州某软件公司&#xff0c;干了接近6年的功能测试&#xff0c;今年年初&#xff0c;感觉自己不能够在这样下去了&#xff0c;长时间呆在一个舒适的环境会让一个人堕落! 而我已经在一个企业干了6年的功能测试…

24/11/5 算法笔记adagrad 自适应学习率

AdaGrad&#xff08;Adaptive Gradient Algorithm&#xff09;是一种用于随机优化的算法&#xff0c;它通过适应每个参数的学习率来优化目标函数。 自适应学习率&#xff1a; AdaGrad算法的核心特点是为每个参数自适应地调整学习率。这意味着每个参数都有自己的学习率&#xff…

逆向之断点和找解密方法

企名片科创平台 先找到解密内容 ctrlshiftF搜索关键字,一般用一个函数包裹的就是解密方法 有2个方法调用,给其中一个打上断点刷新页面,为什么要打断点?为什么不打断点我就没有办法在控制台直接输出变量的值或者调用函数呢&#xff1f;个人理解这时候i只是一个局部变量&#x…

【云备份】httplib库

目录 1.httplib库简介 2.httplib请求类 3.httplib响应类 4.Server类 5.Client类 6.httplib库搭建简单服务器 6.1.ubuntu20.04使用防火墙开放端口 6.2.效果 7.httplib库搭建简单服务器 注意&#xff1a;如果对HTTP不熟悉就去&#xff1a;【网络】HTTP_yum install telne…

【CENet】多模态情感分析的跨模态增强网络

在MSA领域&#xff0c;文本的准确度远远高于音频和视觉&#xff0c;如果文本能达到90%&#xff0c;那么音频和视觉的准确度只有60%~80%&#xff0c;但是过往研究很少针对情感分析的背景下去提高音频和视频的准确度。 abstract&#xff1a; 多模态情感分析&#xff08;MSA&…

多线程--模拟实现定时器--Java

一、定时器的概念 定时器的本质就是一个闹钟&#xff0c;时间到了开始执行某些逻辑。Java标准库中的定时器是Timer。 我们查阅Java文档可以详细看到定时器的使用方法&#xff1a; Timer最核心的方法就是schedule方法。值得注意的是我们通常描述任务是使用Runnable来描述&…

‌MySQL中‌between and的基本用法‌

文章目录 一、between and语法二、使用示例2.1、between and数值查询2.2、between and时间范围查询2.3、not between and示例 BETWEEN AND操作符可以用于数值、日期等类型的字段&#xff0c;包括边界值。 一、between and语法 MySQL中的BETWEEN AND操作符用于在两个值之间选择…

视频一键转换3D:Autodesk 发布 Video to 3D Scene

Video 3D Scene 最近 Autodesk 旗下公司 Wonder Dynamics 推出了 Wonder Animation 的测试版&#xff0c;它使用突破性的视频到 3D 场景技术&#xff0c;通过将任何视频序列转换为 3D 动画场景来加速动画电影的制作。 Video 3D Scene Video 3D Scene 生成效果 作为 Wonder Stud…

数据结构 C/C++(实验一:线性表)

&#xff08;大家好&#xff0c;今天分享的是数据结构的相关知识&#xff0c;大家可以在评论区进行互动答疑哦~加油&#xff01;&#x1f495;&#xff09; 目录 提要&#xff1a;实验题目 一、实验目的 二、实验内容及要求 三、算法思想 实验1 实验2 四、源程序及注释 …

关于SQLServer在局域网内无法连接的问题的解决思路

针对SQL Server 2008在局域网内无法连接的问题&#xff0c;以下是一些详细的解决办法。我们在过程中需要用到Microsoft SQL Server 2008和Microsoft SQL Server tools 2008数据库软件中的配置管理器以及SQL Server Management Studio工具&#xff0c;入下截图所示。 一、检查网…

【C++】RBTree——红黑树

文章目录 一、红黑树的概念1.1 红⿊树的规则&#xff1a;1.2 理解最长路径长度不超过最短路径长度的 2 倍1.3 红⿊树的效率 二、 红⿊树的实现2.1 红⿊树的结构2.2 红⿊树的插⼊2.2.1 红⿊树树插⼊⼀个值的⼤概过程 2.3 红⿊树的插⼊代码实现 一、红黑树的概念 红⿊树是⼀棵⼆…

Docker-- cgroups资源控制实战

上一篇&#xff1a;容器化和虚拟化 什么是cgroups&#xff1f; cgroups是Linux内核中的一项功能&#xff0c;最初由Google的工程师提出&#xff0c;后来被整合进Linux内核; 它允许用户将一系列系统任务及其子任务整合或分隔到按资源划分等级的不同组内&#xff0c;从而为系统…

vscode ssh连接autodl失败

autodl服务器已开启&#xff0c;vscode弹窗显示连接失败 0. 检查状态 这里的端口和主机根据自己的连接更改 ssh -p 52165 rootregion-45.autodl.pro1. 修改config权限 按返回的路径找到config文件 右键--属性--安全--高级--禁用继承--从此对象中删除所有已继承的权限--添加…

你适合哪种tiktok广告账户类型?

TikTok在广告营销方面的分类体系极为详尽。在开设广告账户时&#xff0c;根据不同的海外市场和商品类型&#xff0c;TikTok会有各自的开户标准。此外&#xff0c;广告主所开设的TikTok广告账户类型会直接影响其可投放的广告类型。在广告出价方面&#xff0c;广告主的营销目标不…

大规模语言模型:从理论到实践(1)

1、绪论 大规模语言模型&#xff08;Large Language Models&#xff0c;LLM&#xff09;是由包含数百亿以上参数的深度神经网络构建的语言模型&#xff0c;采用自监督学习方法通过大量无标注文本进行训练。自2018年以来&#xff0c;多个公司和研究机构相继发布了多种模型&#…

SpringBoot中@Validated或@Valid注解校验的使用

文章目录 SpringBoot中Validated或Valid注解校验的使用1. 添加依赖2. 使用示例准备2-1 测试示例用到的类2-2 实体Dto&#xff0c;加入校验注解2-2 Controller 3. 示例测试4. Valid 和 Validated注解详解4-1 常用规则注解4-2 分组验证4-2-1 示例准备4-2-2 Controller接口4-2-3 P…

HarmonyOS使用arkTS拉起指定第三方应用程序

HarmonyOS使用arkTS拉起指定第三方应用程序 前言代码及说明bundleName获取abilityName获取 前言 本篇只说采用startAbility方式拉起第三方应用&#xff0c;需要用到两个必备的参数bundleName&#xff0c;abilityName&#xff0c;本篇就介绍如何获取参数… 代码及说明 bundle…

04_CC2530+Uart串口通信

04_CC2530UART串口通信 串口通信基本概念 串行通信: 数据字节一位位地依次传送的通信方式, 串行通信的速度慢, 但用的传输线条数少, 成本低&#xff0c;适用于远距离的数据传送并行通信: 数据字节的各位同事传送的通信方式, 优点是数据传送速度快, 缺点是占用的传输线条数多,…