博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【洛谷P4933 大师】动态规划
阅读量:5287 次
发布时间:2019-06-14

本文共 1052 字,大约阅读时间需要 3 分钟。

题目描述

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 
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;}

转载于:https://www.cnblogs.com/Dawn-Star/p/9827297.html

你可能感兴趣的文章
hdu 2807 The Shortest Path 矩阵
查看>>
熟悉项目需求,要知道产品增删修改了哪些内容,才会更快更准确的在该项目入手。...
查看>>
JavaScript 变量
查看>>
java实用类
查看>>
smarty模板自定义变量
查看>>
研究称90%的癌症由非健康生活习惯导致
查看>>
命令行启动Win7系统操作部分功能
查看>>
排序sort (一)
查看>>
Teamcenter10 step-by-step installation in Linux env-Oracle Server Patch
查看>>
Struts2学习(三)
查看>>
Callable和Runnable和FutureTask
查看>>
GitHub 多人协作开发 三种方式:
查看>>
文本域添加编辑器
查看>>
Yum安装MySQL以及相关目录路径和修改目录
查看>>
java获取hostIp和hostName
查看>>
关于web服务器和数据库的各种说法(搜集到的)
查看>>
C# Stream 和 byte[] 之间的转换
查看>>
OMG: daily scrum nine
查看>>
redis与spring结合错误情况
查看>>
第六章 字节码执行方式--解释执行和JIT
查看>>