题目描述

ljt12138首先建了n个特斯拉电磁塔,这些电塔排成一排,从左到右依次标号为1到n,第i个电塔的高度为h[i]。

建筑大师需要从中选出一些电塔,然后这些电塔就会缩到地下去。这时候,如果留在地上的电塔的高度,从左向右构成了一个等差数列,那么这个选择方案就会被认为是美观的。

建筑大师需要求出,一共有多少种美观的选择方案,答案模998244353。

注意,如果地上只留了一个或者两个电塔,那么这种方案也是美观的。地上没有电塔的方案被认为是不美观的。

分析

题目的大致意思就是求当前数列的等差数列的个数

我们就定义状态是f[i][j]表示到第i个数,公差是j的等差数列的方案总数。

\[F_{i\ j}=F_{i\ j}+F_{k\ j}+1
\]

k是要枚举

AC代码

#include <bits/stdc++.h>
using namespace std;
const int Mod=998244353;
int n,V;
int H[1005],f[1005][40005];
inline int read() {
int w=0,x=0; char ch=0;
while (!isdigit(ch)) {w|=ch=='-';ch=getchar();}
while (isdigit(ch)) {x=(x<<1)+(x<<3)+(ch^48);ch=getchar();}
return w?-x:x;
}
int Max(int n,int m) {return n>m?n:m;}
int main() {
n=read();
for (int i=1;i<=n;i++) H[i]=read();
int ans=0;
for (int i=1;i<=n;i++) {
ans=(ans+i)%Mod;
for (int j=i-1;j;j--) {
int X=H[i]-H[j];
ans=(ans+f[j][X+10005])%Mod;
f[i][X+10005]=(f[i][X+10005]+f[j][X+10005]+1)%Mod;
}
}
printf("%d\n",ans);
return 0;
}

最新文章

  1. python tornado websocket 实时日志展示
  2. php中的抛出异常和捕捉特定类型的异常
  3. CSS权威指南 - 浮动和定位 2
  4. RMA Sales Order &ndash; Stuck with &ldquo;Awaiting Return Disposition&rdquo;
  5. C# webBrowser操作 javascript
  6. html-图片button,抓包---Shinepans
  7. Excel设置下拉选项的方法
  8. client对象层次和0级DOM
  9. 【转】解决Windows不能在本地计算机启动apache tomcat
  10. 我来说说XML文件中的xmlns、xmlns:xsi和xsi:schemaLocation的具体含义
  11. urllib2的基本使用
  12. [bzoj1692] [Usaco2007 Dec]队列变换 (hash||暴力)
  13. Codeforces Round #467 (Div. 1). C - Lock Puzzle
  14. [线程]Thead 中传参数RuntimeError: thread.__init__() not called
  15. SpringBoot如何新建一个项目 2017.12.14
  16. IDEA汉化教程
  17. make capslock+hjkl as arrows
  18. Find the peace with yourself
  19. SharpSvn 调用在运行时提示加载程序集出错,或有依赖项
  20. php将多个值的数组去除重复元素

热门文章

  1. Nginx虚拟主机流量状态模块(nginx-module-vts)使用说明文档(四)
  2. ABAP SORT排序注意点
  3. TensorFlow入门实操课程第一章教程笔记
  4. 在H5页面播放m3u8音频文件
  5. java变量及常量
  6. Linux 之 deb 包生成、安装、卸载
  7. sonarqube 8.9版本配置收邮件提醒
  8. Java:Java的~取反运算符详解
  9. Linux守护进程列表/守护进程
  10. Nacos配置中心功能