首页 > 其他分享 >计数题 随机训练

计数题 随机训练

时间:2024-11-11 21:46:26浏览次数:1  
标签:pre 训练 int 计数 read 随机 now dp define

CF578D

这道题还是挺有意思的。

题意简单,就是让你求出与模式串 \(S\) 长度均为 \(len\) 的最长公共子序列为 \(len-1\) 的字符串 \(T\) 的数量。

首先在 \(T\) 固定的情况下求最长公共子序列,就是经典的 dp 式子,不再多说。

那么对于 dp 式 \(dp_{i,j}\) 对 \(dp_{n,n}\) 最大贡献值为 \(min(i,j) + min(n-i,n-j)\),我们要求这个式子的结果得大于 \(len-1\),式子推一下发现就是要满足 \(|i-j| \le 1\),那么对于固定的 \(i\),有效的 \(dp\) 值只有 \(3\) 个,即 \(i-1\),\(i\),\(i+1\),而且 \(dp\) 值必须得是 \((i-2,i-1)\),\((i-1,i)\),\((i-1,i)\),那么就直接 \(2^3\) 维护即可。

dp of dp 题目

点击查看代码
#include<bits/stdc++.h>
#define fir first
#define sec second
#define int long long
#define lowbit(x) x&(-x)
#define mkp(a,b) make_pair(a,b)
using namespace std;
typedef pair<int,int> pir;
inline int read(){
	int x=0,f=1; char c=getchar();
	while(!isdigit(c)){if(c=='-') f=-1; c=getchar();}
	while(isdigit(c)){x=x*10+(c^48); c=getchar();}
	return x*f;
}
const int inf=1e18,N=1e5+5;
int n,m;
char s[N];
int dp[N][8],a[N];
int pre[3],now[3]; //i-1 i i+1
signed main(){
	n=read(),m=read();
    scanf("%s",s+1);
    for(int i=1;i<=n;i++) a[i]=s[i]-'a'+1;
    for(int i=1;i<=m;i++){
        int nxt=1;
        if(i==a[1]) nxt+=2;
        if(i==a[1]||i==a[2]) nxt+=4;
        dp[1][nxt]++;
    }
    for(int i=1;i<n;i++) for(int j=0;j<8;j++){
        if(!dp[i][j]) continue;
        for(int k=1;k<=m;k++){
            pre[0]=(i-2)+(j&1);
            pre[1]=(i-1)+((j>>1)&1);
            pre[2]=(i-1)+((j>>2)&1);
            now[0]=max(pre[1],pre[0]+(a[i]==k));
            now[1]=max({now[0],pre[2],pre[1]+(a[i+1]==k)});
            now[2]=max({now[1],pre[2]+(a[i+2]==k)});
            if(now[0]<i-1||now[1]<i||now[2]<i) continue;
            int nxt=0;
            if(now[0]==i) nxt+=1;
            if(now[1]==i+1) nxt+=2;
            if(now[2]==i+1) nxt+=4;
            dp[i+1][nxt]+=dp[i][j];
        }
    }
    cout<<dp[n][0]+dp[n][1]<<'\n';    
}

标签:pre,训练,int,计数,read,随机,now,dp,define
From: https://www.cnblogs.com/Cyan0826/p/18540656

相关文章

  • 使用YOLOv8训练岩石数据集
    准备工作安装依赖确保你的开发环境中安装了必要的软件和库。YOLOv8是基于PyTorch框架的,因此你需要安装Python以及PyTorch。安装Python(推荐3.7或更高版本)安装PyTorch:你可以从PyTorch官方网站获取安装命令,根据你的系统配置选择合适的安装方式。克隆YOLOv8的官方仓库到......
  • 如何使用YOLOv8进行训练变电站电力设备缺陷数据集 共6004张图像 train test val比例为
    表计读数异常、表计外壳破损、异物鸟巢、空中漂浮物、表盘模糊、表盘破损、绝缘子破裂、地面油污、硅胶桶变色变电站电力设备缺陷数据集共6004张图像traintestval比例为7:2:1有txt和yaml两种格式数据集共7种标签,包括表计读数异常、表计外壳破损、异物鸟巢、空中漂浮......
  • 计数问题的思考方法
    计数问题的思考方法——以《[ARC102E]Stop.Otherwise...》为例DP如果要使用DP,则重点在其状态的设计,即我已经考虑了什么,当前正在考虑什么,通过一个不断将考虑范围扩大的方法,得到答案。在转移的过程中,往往通过当前决策点的不同状态,从不同的状态转移过来(或转移到不同的状态),以得......
  • 代码随想录算法训练营第二十二天| leetcode77. 组合、leetcode216.组合总和III、leetc
    1leetcode77.组合题目链接:77.组合-力扣(LeetCode)文章链接:代码随想录视频链接:带你学透回溯算法-组合问题(对应力扣题目:77.组合)|回溯法精讲!_哔哩哔哩_bilibili思路:开始想循环,感觉行不通,然后看了视频,就嗯理解了一些感觉跟递归的思路确实差不多1.1回溯三部曲回溯的方法首......
  • 数字逻辑电路-74194模5扭环形计数器、74160同步7-23加计数器-Quartus2-时序逻辑电路:
    (建议两个实验分成两个项目做,只有LowFreqClk设计会重复)(有些地方会省略文件置顶和编译,有问题的话看看是不是文件没置顶或没编译)一、实验预习:用双向移位寄存器74194和门电路设计一个右移模5的扭环计数器;并画出电路图二、实验内容:1.双向移位寄存器74194的应用——扭环形......
  • NOIP 2024 游记 & 赛前训练(未完待续)
    NOIP2024游记&赛前训练day-18(11.11)今天做信友错的模拟赛。第一题是和最短路有关的,看到\(n\le500\)就想到了\(n^3\logn\),然而看了很久都不会做,于是果断火速打了\(O(n^4)\)的暴力走人,get50pts。然后看第二题,发现是最大异或路径,正好最近刚学了线性基,于是想到之前做......
  • 生成黑白相间并且随机彩色块的视频
    生成黑白相间并且随机彩色块的视频fromPILimportImage,ImageDrawimportnumpyasnpfrommoviepy.editorimportImageSequenceClip#视频参数width=720height=540fps=60duration_black=2#全黑帧持续时间(s)duration_white=1#白色块帧持续时间(s)b......
  • 代码随想录算法训练营day43| 300.最长递增子序列 674. 最长连续递增序列 718. 最长
    学习资料:https://programmercarl.com/0300.最长上升子序列.html#算法公开课动态规划系列之子序列学习记录300.最长递增子序列(长度最少为1;dp[i]代表到i为止的最长子序列的长度;i的值根据i之前比如j的值来判断;每个地方都有可能获得最长长度)点击查看代码classSolution:def......
  • 大模型--训练加速之deepspeed demo-13
    目录1.config.json2.main.py3.start.sh1.config.json{"train_batch_size":4,"steps_per_print":2000,"optimizer":{"type":"Adam","params":{"lr":0.001,......
  • 随机化算法
    随机化算法随机化函数rand()srand(seed);intx=rand()%n+1;seed可以是一个常数如114514也可以是时间time(0)。注意,rand()函数在windows系统下返回的取值范围为\([0,2^{15}-1]\),在linux系统下返回的取值范围为\([0,2^{31}-1]\)。mt19937mt19937rd(seed);pf("......