EVERYTHING HAPPENS FOR THE |

wnsyou

园龄:2年4个月粉丝:19关注:16

2023-04-23 00:26阅读: 38评论: 0推荐: 0

abc253_e Distance Sequence 题解

Distance Sequence

简单的动态规划题。

题意

给定三个整数 nmk,求有多少个序列满足以下条件:

  • 对于 1in1aim
  • 对于 1<in|aiai1|k

答案对 998244353 取模。

思路

求方案数?首先考虑用动态规划。

  • 状态:dpi,j 表示考虑前 i 个数,且第 i 个数为 j 的方案数。
  • 转移:
    • 如果 k0,则 dpi,j=(1ljkdpi1,l+j+klmdpi1,l)
    • 如果 k=0,则 dpi,j=1lmdpi1,l
  • 初始状态:对于 1imdp1,i=1
  • 目标状态:1imdpn,i

我们可以敲出一个暴力,时间复杂度:O(n2×m)点这里,可以发现只能过一半的测试点。

这时,我们发现:转移是一段区间的和!考虑前、后缀和优化,将转移优化至 O(1)

由于有了前后缀和,我们就可以省略掉 i 这个维度,记得取模

时空复杂度

  • 时间复杂度:O(n×m)
  • 空间复杂度:O(m)

代码

点击查看代码
#include <iostream>
using namespace std;
using ll = long long;
const int mod = 998244353;
ll dp[5010], sum[5010], num[5010]; // 我为了防止爆 int,开了 long long
int n, m, k;
int main () {
ios::sync_with_stdio(0), cin.tie(0);
cin >> n >> m >> k;
for (int i = 1; i <= m; i++) { // 初始状态
sum[i] = sum[i - 1] + 1;
}
for (int i = m; i; i--) {
num[i] = num[i + 1] + 1;
}
for (int i = 2; i <= n; i++) { // 枚举处理前几个,第 1 个已经处理了
for (int j = 1; j <= m; j++) { // 枚举当前位置上的数值
if (k == 0) { // 分类讨论,因为当 k = 0 时上一位数值为 j 的方案数会算两次
dp[j] = sum[m];
} else {
dp[j] = 0;
if (j > k) { // 确保下标不越界
dp[j] = sum[j - k]; // 前缀
}
if (j + k <= m) {
dp[j] = (dp[j] + num[j + k]) % mod; // 后缀
}
}
}
for (int j = 1; j <= m; j++) { // 更新前缀和
sum[j] = (sum[j - 1] + dp[j]) % mod;
}
for (int j = m; j; j--) { // 更新后缀和
num[j] = (num[j + 1] + dp[j]) % mod;
}
}
cout << sum[m]; // 偷懒,sum[m] = dp[1] + dp[2] + ... + dp[m],不用再算一遍,同理 num[1] 也可以
return 0;
}

本文作者:wnsyou の blog

本文链接:https://www.cnblogs.com/wnsyou-blog/p/17344537.html

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   wnsyou  阅读(38)  评论(0编辑  收藏  举报
  1. 1 勝利への道 安藤浩和
  2. 2 Minecraft’s End Eric Fullerton
  3. 3 月光曲完整版 贝多芬 云熙音乐
  4. 4 平凡之路 (Live版) 朴树
  5. 5 Minecraft C418
  6. 6 Paradise NiziU
  7. 7 叫我,灰原哀 龙大人不喷火
  8. 8 心机之蛙,一直摸你肚子 ——《名侦探柯南》原创同人曲 炊饭,叶辞樱,温海,寒砧,南柯柯,小茜玛姬,盛姝,阿崔Ac,贝壳初,千湛,兮茶子DaYu,乔慕,黎鹿北,起千温卿,遮阳伞,曲悠
  9. 9 战 歌 此去经年
Paradise - NiziU
00:00 / 00:00
An audio error has occurred, player will skip forward in 2 seconds.

作词 : AKIRA/Bang Chan (3RACHA)/CHANGBIN (3RACHA)/HAN (3RACHA)

作曲 : Bang Chan (3RACHA)/CHANGBIN (3RACHA)/HAN (3RACHA)/VERSACHOI

编曲 : VERSACHOI/Bang Chan(3RACHA)

昔々きいた話

ふたつの虹を超えたその向こう

光り輝く泉がある

その水面(みなも)映るのは

ほんとの自分

しあわせは今 しあわせは空

Let’s fly fly & fly We fly & fly

目と目を合わせ

信じあえるよ 感じあえるさ

Let’s fly fly & fly We fly & fly

いつか

わかるだろう

君にはもう君だけの色も形も

優しさも強さもあるんだ

上手くいかなくたって

失敗ばっかりだって

ぼくはここにいるよ

I love you so much 大好きなんだ

そのままで 大好きさ Paradise

宝物はそこにあるよ 気がついてよ

世界中探しても

君は君しかいないよ

広がる楽園 繋げよう

誰も誰もが Paradise

雨が降れば ぬかるむ道 Oh yeah

道端に咲いた花に集まる蝶を

照らす太陽は全てを温め

乾いた道に雨は降る

あたりまえだけど奇跡

小さなちっぽけな今には

大きな大きな夢が詰まっているの

悔しさに泣いたって

手を差し伸べるから

ぼくはここにいるから

I love you so much 大好きなんだ

そのままで 大好きさ Paradise

宝物は君なんだよ 気がついてよ

この惑星(ほし)の歴史にも

君は君しかいないよ

目に見えないけど確かに

ひとりひとりの Paradise

しあわせは今 しあわせは空

Let’s fly fly & fly We fly & fly

目と目を合わせ

信じあえるよ 感じあえる

だから大丈夫

心のまま行こう Paradise

加载中…

{{tag.name}}

{{tran.text}}{{tran.sub}}
无对应文字
有可能是
{{input}}
尚未录入,我来提交对应文字
评论
收藏
关注
推荐
深色
回顶
收起
点击右上角即可分享
微信分享提示