CTH: 谁帮我切开这个蛋糕???

news/2024/9/22 1:29:59

$\quad $ 看到CTH立马就开始做了好吧,很适合当做入门题。

$\quad $ 首先定义 \(f[i]\) 表示进行到第 \(i\) 位时的答案数,\(bit\) 数组表示 \(01\) 序列。那么当 \(bit[i]\)\(1\) 时,有

\[f[i]=\Sigma_{j=i+1}^{n+1} f[j] \]

$\quad $ 至于为什么循环到 \(n+1\) ,循环到第 \(j\) 位时,我们要把这一位与后面的若干位(也许没有)划分到一起,当前位置的数可以和后面所有的数划分到一起,那么临界就是搜索第 \(n+1\) 位而非第 \(n\) 位。

$\quad $ 当 \(bit[i]\)\(0\) 时,有

\[f[i]=f[i+1] \]

$\quad $ 所以直接状态转移即可,或者 \(dfs\) 也行(不过都是 \(O(n^2)\) 的新的数据范围可以卡)。

DFS
#define yhl 0
#include"bits/stdc++.h"
using namespace std;
const int N=3e3+10,p=998244353;
int f[N],n,bit[N];
char ch[N];
int dfs(int pos){if(f[pos]!=-1)return f[pos];if(pos>=n)return 1;int ans=0;if(ch[pos]=='1')for(int j=pos+1;j<=n+1;j++)ans=(ans+dfs(j))%p;else ans=dfs(pos+1);return f[pos]=ans;
} 
int main(){memset(f,-1,sizeof f);scanf("%d",&n);int nl=n;scanf("%s",ch+1);printf("%d",dfs(1));return yhl;
}
动归
#define yhl 0
#include"bits/stdc++.h"
using namespace std;
const int N=3e3+10,p=998244353;
int f[N],n;
char ch[N];
int main(){scanf("%d",&n);scanf("%s",ch+1);f[n+1]=1;for(int i=n;i>=1;i--){if(ch[i]=='1')for(int j=i+1;j<=n+1;j++)f[i]=(f[i]+f[j])%p;else f[i]=f[i+1];}printf("%d",f[1]);return yhl;
}

$\quad $ 其实看了动归代码我们可以发现转移时实际上是在求前缀和,直接拿数组维护一下即可,实际上我们并不需要定义一个数组,直接拿一个变量存即可,请读者自行理解。

$\quad $ 那么 \(dp\) 数组是不是也可以省掉呢?可以!
$\quad $ 所以最后 \(O(n)\) 的代码就出来了(doge)

点击查看代码
#define yhl 0
#include"bits/stdc++.h"
using namespace std;
const int N=3e3+10,p=998244353;
int ans=1,s=1,n;
char ch[N];
int main(){scanf("%d",&n);scanf("%s",ch+1);for(int i=n;i>=1;i--){if(ch[i]=='1')ans=s;s=(s+ans)%p;}printf("%d",ans);return yhl;
}

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

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

相关文章

MyBatis针对String类型的数字if标签失效问题

需求描述: 大致场景是订单模块去接受流程模块发送的MQ消息,针对MQ消息发送的是一个实体类,该实体类中有一个String类型的字段,用于判断当前业务状态,1 表示 审核中 2 表示 已审核 等。订单模块根据这个状态去修改自身状态的信息可以看到这里有一个If标签,用于判断这个ev…

业务和IT部门都喜欢的文件摆渡设备是什么样的?

网络隔离技术作为网络安全和数据安全的重要保障手段被广泛应用到各个行业领域,国家出台了相关法律法规,对“网络隔离”和“数据交换安全”提出了更明确、更规范的要求,尤其是对于政府、教育、医疗、能源、航空航天、金融等行业,国家出台了更细的行业性法规,指导网络和数据…

颠覆传统编程,用ChatGPT十倍提升生产力

我们即将见证一个新的时代!这是最好的时代,也是最坏的时代!我们即将见证一个新的时代!这是最好的时代,也是最坏的时代!需求背景背景:平时会编写博客,并且会把这个博客上传到github上,然后自己买一个域名挂到github上。 我平时编写的博客会有一些图片来辅助说明的,写完…

Java开发者的神经网络进阶指南:深入探讨交叉熵损失函数

在本文中,我们深入探讨了交叉熵函数作为一种重要的损失函数,特别适用于神经网络训练中。交叉熵通过衡量真实标签分布与模型预测分布之间的差异,帮助优化模型的性能。我们从信息论的角度解释了交叉熵的概念,它是基于Shannon信息论中的熵而来,用于度量两个概率分布之间的差异…

结构型设计模式

适配器模式 需求方法M1。但已经存在一个方法M2能实现需求功能,引入子类来覆盖M1方法(M1方法中调用已有的M2方法)。这个新子类就是适配器 将已有的方法转换为需求的另一种方法(一般由于方法名差异;参数不同) 这一模式中的“接口”是广义接口,可代指一个/一组方法集合 优点…

【日记】原来真的有人不适合谈恋爱(1194 字)

正文21 日正是周五,夏至。全年当中,白天时长最长的一天。而恰好那天也是银行扣息的日子。所以很忙,我差点没能走掉。所幸最终还是有惊无险。到斯的家里,是晚上 9 点钟。比我想得要早。这个周周四,他过生日。但是那天因为上班,所以移到了周末。不是法定节假日,很普通的一…

行为型设计模式

职责链模式(Chain of Responsibility Pattern) 职责链是单向的结构,避免请求发送者与多个请求处理者耦合在一起。因此在链上传递直到接收者接收到为止职责链每个具体处理者都会实现具体的方法来尝试处理请求。 命令模式-Command Pattern 迭代器模式(Iterator) 观察者模式 o…

内卷时代!程序员如何突破35岁的宿命?

曾经梦想仗剑走天涯,如今却在写字楼里安家。他乡容不下灵魂,家乡容不下肉体,还面临着35岁被毕业,这难道就是程序员的宿命?大家好,我是码农先森。 曾经梦想仗剑走天涯,如今却在写字楼里安家。他乡容不下灵魂,家乡容不下肉体,还面临着35岁被毕业,这难道就是程序员的宿命…