题目:

洛谷4933

分析:

(自己瞎yy的DP方程竟然1A了,写篇博客庆祝一下)

(以及特斯拉电塔是向Red Alert致敬吗233)

这里只讨论公差不小于\(0\)的情况,小于\(0\)的情况进行复读机即可(注意不要重复计算公差为\(0\)的情况)。

用\(dp[i][j]\)表示结尾为第\(i\)个数,公差为\(j\)的长度不小于\(2\)的非降等差数列的方案数(单独\(1\)个数的情况公差不确定不好处理,最后给答案加上\(n\)就行了)。

那么对于\(i\),枚举所有\(j(j<i\)且\(h[j]\leq h[i])\),则有

(加\(1\)是加上了新的长度为\(2\)的数列\(\{h[j],h[i]\}\))

\[dp[i][h[i]-h[j]]=\sum_j (dp[j][h[i]-h[j]]+1)
\]

总的来说还是一道比较基础的DP题。时间复杂度\(O(nV)\)

代码:

先念诗:

瓜之嘴

作者:YYC神犇

好山配好水,

好瓜配好嘴。

不膜神仙瓜,

写题一定萎。

(1A多亏模数叫Jumpmelon)

#include <cstdio>
#include <algorithm>
#include <iostream>
#include <cstring>
using namespace std; namespace zyt
{
typedef long long ll;
const int N = 1010, V = 2e4 + 10, Jumpmelon = 998244353;
int h[N], n, dp[N][V], ans;
int work()
{
cin >> n;
for (int i = 1; i <= n; i++)
cin >> h[i];
for (int i = 1; i <= n; i++)//upper
{
for (int j = 1; j < i; j++)
if (h[j] <= h[i])
dp[i][h[i] - h[j]] = (dp[i][h[i] - h[j]] + dp[j][h[i] - h[j]] + 1) % Jumpmelon;
}
for (int i = 1; i <= n; i++)
for (int j = 0; j < V; j++)
ans = (ans + dp[i][j]) % Jumpmelon;
memset(dp, 0, sizeof(dp));
for (int i = 1; i <= n; i++)//lower
{
for (int j = 1; j < i; j++)
if (h[i] < h[j])
dp[i][h[j] - h[i]] = (dp[i][h[j] - h[i]] + dp[j][h[j] - h[i]] + 1) % Jumpmelon;
}
for (int i = 1; i <= n; i++)
for (int j = 0; j < V; j++)
ans = (ans + dp[i][j]) % Jumpmelon;
cout << (ans + n) % Jumpmelon;
return 0;
}
}
int main()
{
return zyt::work();
}

【洛谷4933】大师(DP)的更多相关文章

  1. 洛谷教主花园dp

    洛谷-教主的花园-动态规划   题目描述 教主有着一个环形的花园,他想在花园周围均匀地种上n棵树,但是教主花园的土壤很特别,每个位置适合种的树都不一样,一些树可能会因为不适合这个位置的土壤而损失观赏价 ...

  2. 洛谷 p6858 深海少女与胖头鱼 洛谷月赛 期望dp

    洛谷10月月赛 2 t2 深海少女与胖头鱼 题目链接 参考资料:洛谷10月赛2讲评ppt; 本篇题解考完那天就开始写,断断续续写到今天才写完 本题作为基础的期望dp题,用来学习期望dp还是很不错的 ( ...

  3. 洛谷 4933 洛谷10月月赛II T2 大师

    [题解] f[i][j]表示最后一个数为h[i],公差为j的等差数列的个数.n方枚举最后一个数和倒数第二个数转移即可.注意公差可能为负数,需要移动为正数再作为下标. #include<cstdi ...

  4. 洛谷P4719 动态dp

    动态DP其实挺简单一个东西. 把DP值的定义改成去掉重儿子之后的DP值. 重链上的答案就用线段树/lct维护,维护子段/矩阵都可以.其实本质上差不多... 修改的时候在log个线段树上修改.轻儿子所在 ...

  5. 2018普及组摆渡车洛谷5017(dp做法)

    啦啦啦,这一篇是接上一篇的博客,上一篇是记忆化搜索,而这一篇是dp+前缀和小技巧 dp这种玄学做法我这种蒟蒻当然不是自己想出来的,参考https://blog.csdn.net/kkkksc03/ar ...

  6. 洛谷P3975 跳房子 [DP,单调队列优化,二分答案]

    题目传送门 跳房子 题目描述 跳房子,也叫跳飞机,是一种世界性的儿童游戏,也是中国民间传统的体育游戏之一. 跳房子的游戏规则如下: 在地面上确定一个起点,然后在起点右侧画 n 个格子,这些格子都在同一 ...

  7. 洛谷1373(dp)

    常规线性dp,需要时就加一维.\(dp[i][j][t][s]\)表示在点\((i,j)\)时瓶子里剩\(t\)且为\(s\)走(0代表小a,1代表uim)时的方案数. de了半天发现是初次尝试的快速 ...

  8. 洛谷P4719 动态DP —— 动态DP(树剖+矩乘)

    题目:https://www.luogu.org/problemnew/show/P4719 感觉这篇博客写得挺好:https://blog.csdn.net/litble/article/detai ...

  9. 洛谷1280(dp)

    题目性质:1.当前节点空闲则必须做任务,而不是可选可不选:2.然而前面的如果能覆盖当前节点,就可以不选. 解决方法:倒着扫可以很好地解决这两个问题.dp[i]为时刻i可得的最大空闲时间.如果此刻没有任 ...

随机推荐

  1. Django-django-redis使用

    自定义连接池 这种方式跟普通py文件操作redis一样,代码如下: views.py import redis from django.shortcuts import render,HttpResp ...

  2. saltstack(三) grains、pillar的使用

    一,grains grains: 这个跟puppet的facter功能一样.主要负责采集客户端一些基本信息, 这个也完全可以自定义,可以在客户端自定义,然后自动汇报上来:也可以从服务器端定义然后推下去 ...

  3. foreach获取访问元素的下标

    今天在用foreach循环的时候,要同时根据访问下标获取另一个list对象数据,之前想的方法是加一个变量i,然后每次i++,但是感觉这样不是很好!,后来发现这样也可以!举个简单的例子! foreach ...

  4. 【07】AngularJS Filters

    AngularJS Filters 过滤器可以使用一个管道字符(|)添加到表达式和指令中. AngularJS 过滤器 AngularJS 过滤器可用于转换数据: 过滤器 描述 currency[ˈk ...

  5. Spring MVC学习总结(8)——Swagger入门详解

    前言 Swagger 是一款RESTFUL接口的文档在线自动生成+功能测试功能软件.本文简单介绍了在项目中集成swagger的方法和一些常见问题.如果想深入分析项目源码,了解更多内容,见参考资料. S ...

  6. [luoguP1072] Hankson 的趣味题(数论)

    传送门 由题意得 gcd(x, a0) = a1 ——> gcd(x / a1, a0 / a1) = 1 lcm(x, b0) = b1 ——> x * b0 / gcd(x, b0) ...

  7. [luoguP1901] 发射站(单调栈)

    传送门 呵呵 ——代码 #include <cstdio> #include <iostream> #define N 1000010 #define LL long long ...

  8. [luoguP2680] 运输计划(lca + 二分 + 差分)

    传送门 暴力做法 50 ~ 60 枚举删边,求最大路径长度的最小值. 其中最大路径长度运用到了lca 我们发现,求lca的过程已经不能优化了,那么看看枚举删边的过程能不能优化. 先把边按照权值排序,然 ...

  9. codeforces 371D

    #include<stdio.h> #define N 210000 struct node { int x,next; __int64 count,vec; }pre[N]; int n ...

  10. Ubuntu 16.04安装BleachBit清理系统垃圾文件

    在LInux下不同于Windows会产生系统垃圾,但是Linux会产生安装软件时的依赖包,比如卸载一个软件,其依赖包是不会删除的.但是可以通过以下命令解决: #清理旧版本的软件缓存 sudo apt- ...