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;
}
目录
相关文章
|
测试技术 开发者
好书推荐《游戏测试精通》
好书推荐《游戏测试精通》
|
程序员
良心之作送你几个Xsheel使用小技巧(2)
良心之作送你几个Xsheel使用小技巧
113 0
良心之作送你几个Xsheel使用小技巧(2)
良心之作送你几个Xsheel使用小技巧(1)
良心之作送你几个Xsheel使用小技巧
126 0
良心之作送你几个Xsheel使用小技巧(1)
|
弹性计算 Ubuntu
感想
完成这件事颇为困难 成就一番事业需要外物 任其发展并非长远之计 务实一点 而且在今后肯定更加辉煌 以青年的毅力
|
弹性计算 程序员 云计算
程序员从入门到大师,需要翻过这些山?
翻过大山,妹子向你招手,涨薪向你点头,成功给你加油!
程序员从入门到大师,需要翻过这些山?
|
人工智能 算法 计算机视觉
感想-day4
来自我的感悟
521 0
《了不起的菲丽西》(r11笔记第64天)
    很久没有去过电影院了,贺岁档的电影也不少,如果让我选择一下,本来是更倾向于看周星驰的新片的,但是让我有些意外的是,这个片子评分竟然不是很高。我对看片子的评分要求还是蛮高,所以思来想去,就去看了评分较高的一部动画片《了不起的菲丽西》,总体来说没有让我失望。
1008 0