P4933 大师

简介: P4933 大师

P4933 大师

本题链接:P4933 大师

本博客给出本题截图

image.png

AC代码

代码解释:

f[i][j]代表的是在以第 i 项结尾,公差为 j 的所有等差数列的数量,在这里我们可以知道,如果我们 j 按照从 1 ~ M 来暴力枚举,显然会 TLE 思考后会发现,我们如果只去枚举 h[i] - h[j] 即可,因为可能会有负数:递减的等差数列,故可能会有 h[i] - h[j] < 0,这里我们把数组开成两倍之后用 h[i] - h[j] + M / 2 即可

这里提一下状态转移方程:

f[i][t] = (f[i][t] + f[j][t] + 1) % mol;

这里为什么要 + 1,可以理解成 在所有的以 j 结尾的数列多加一个 i ,再加上单独由 j 和 i 组成的这么一组数列

注意 dp 过程中我们不讨论只有一个电塔的情况,故我们的 res 初始化为 n

代码

#include <cstdio>
#include <algorithm>
using namespace std;
#include <cstdio>
#include <algorithm>
using namespace std;
const int N = 1010, mol = 998244353, M = 40010;
int h[N];
int f[N][M];
int n;
int main()
{
  scanf("%d", &n);
  for (int i = 1; i <= n; i ++ ) scanf("%d", &h[i]);
  int res = n;
  for (int i = 1; i <= n; i ++ ) 
  {
    for (int j = i - 1; j; j -- )
    {
      auto t = h[i] - h[j] + M / 2;
      f[i][t] = (f[i][t] + f[j][t] + 1) % mol;
      res = (res + f[j][t] + 1) % mol;
    }
  }
  printf("%d\n", res);
  return 0;
}
目录
相关文章
|
7月前
|
人工智能 算法
ChatGpt 能成为恋爱大师吗?
ChatGpt 能成为恋爱大师吗?
56 0
|
弹性计算 程序员 云计算
程序员从入门到大师,需要翻过这些山?
翻过大山,妹子向你招手,涨薪向你点头,成功给你加油!
程序员从入门到大师,需要翻过这些山?
|
程序员
1024 致敬程序员
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/kese7952/article/details/83351462 白茶清欢无别...
887 0
|
安全 大数据 机器学习/深度学习
|
程序员 Windows
向童年致敬,没玩过这些游戏的程序员不是好的美少年~
在那个没有互联网,只有电脑甚至电视的时代,各位IT人的世界充满了......... 游戏!对! 关于过去游戏的回忆可谓如滔滔江水般绵延不绝,接下来,我们就一起来看看,那些时光中我们曾经玩过的游戏。
2427 0