当前位置: 首页 > news >正文

cf1600-1900每天刷2-3道打卡(2)

上一个帖子太长了,编辑起来有点卡干脆重开了一个

Day20------2025.6.03

Problem - E - Codeforces

E. Vasya and Binary String(区间dp)

思路

这其实是一道2400的题,因为最近温习了一下区间dp学习到了这个带有前缀思维的区间dp的状态转移于是就做了这么一个题,话说这个前缀的思维确实很难想到,总之量变引起质变下次遇到的时候就会了

我们设dp[l][r][k]表示区间 l...r 的范围内有k个前缀和s[l]相同的字符与s[l]相连,

那么我们在状态转移的时候分为两种情况:

1.将s[l]连同这k个前缀全部消掉dp[l][r][k]=a[k+1]+dp[l+1][r][0]

2.将连同s[l]的k+1个前缀向后转移,不断枚举断点即可

dp[l][r]=max\begin{Bmatrix} dp[l+1][i]+dp[i+1][r][k+1] \end{Bmatrix}    i\in [l,r],s[i]==s[l]

代码

#include<bits/stdc++.h>
using namespace std;#define vcoistnt ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); 
#define int long long
#define vi vector<int>
#define vb vector<bool>
typedef pair<int,int> pll;const int N=2e5+10;
const int inf=1e18;
const int mod=998244353;//s[l...r]其中有k个和s[l]相等的字符与s[l]相连的最优解
int dfs(int l,int r,int k,string s,vi a,vector<vector<vector<int>>>& dp){if(l==r){return a[k+1];}if(l>r){return 0;}if(dp[l][r][k]!=-1) return dp[l][r][k];int ans=0;//将前缀全部清除ans=max(ans,a[k+1]+dfs(l+1,r,0,s,a,dp));//将前缀向后转移for(int i=l+1;i<=r;i++){if(s[i]==s[l]){ans=max(ans,dfs(l+1,i-1,0,s,a,dp)+dfs(i,r,k+1,s,a,dp));}}return dp[l][r][k]=ans;
}void solve(){int n;string s;cin>>n>>s;s=" "+s;vector<int> a(n+10);for(int i=1;i<=n;i++) cin>>a[i];vector<vector<vector<int>>> dp(n+1,vector<vector<int>>(n+1,vector<int>(n+1,-1)));cout<<dfs(1,n,0,s,a,dp)<<"\n";
}
signed main() {vcoistntcout<<fixed<<setprecision(2);int _=1;// cin>>_;while(_--) solve();return 0;
}

http://www.xdnf.cn/news/781543.html

相关文章:

  • leetcode47.全排列II:HashSet层去重与used数组枝去重的双重保障
  • 大疆无人机的二次开发
  • 数据库的操作
  • Leetcode-7 寻找用户推荐人
  • AI健康小屋+微高压氧舱:科技如何重构我们的健康防线?
  • 吞咽与营养并重:进行性核上性麻痹的饮食之道
  • 帝国CMS QQ登录插件最新版 获取QQ头像和QQ昵称
  • Nginx + Tomcat 负载均衡、动静分离群集
  • Nginx+Tomcat 负载均衡、动静分离
  • 【学习笔记】深度学习-过拟合解决方案
  • H5动态文字效果开发经验分享
  • 20250603在荣品的PRO-RK3566开发板的Android13下的使用命令行来查看RK3566的温度【显示优化版本】
  • 批量大数据并发处理中的内存安全与高效调度设计(以Qt为例)
  • Android App引用vendor编写的jni动态库
  • ESP32开发之LED闪烁和呼吸的实现
  • 基于langchain的简单RAG的实现
  • Unity UI 性能优化终极指南 — Image篇
  • 电脑安装系统蓝屏的原因
  • JavaScript 数据处理 - 数值转不同进制的字符串(数值转十进制字符串、数值转二进制字符串、数值转八进制字符串、数值转十六进制字符串)
  • 蜜獾算法(HBA,Honey Badger Algorithm)
  • 谷歌地图手机版(Google maps)v11.152.0100安卓版 - 前端工具导航
  • 【使用】【经验】docker 清理未使用的镜像的命令
  • 详解代理型RAG与MCP服务器集成
  • 什么是无状态服务
  • Houdini POP入门学习03
  • 题山采玉: Day1
  • 项目开发:【悟空博客】基于SSM框架的博客平台
  • LangChain学习系列之LangChain4j介绍
  • 项目前置知识——不定参以及设计模式
  • 《数据挖掘》- 房价数据分析