【洛谷4933】大师(DP)
题目:
分析:
(自己瞎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题。时间复杂度\(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)的更多相关文章
- 洛谷教主花园dp
洛谷-教主的花园-动态规划 题目描述 教主有着一个环形的花园,他想在花园周围均匀地种上n棵树,但是教主花园的土壤很特别,每个位置适合种的树都不一样,一些树可能会因为不适合这个位置的土壤而损失观赏价 ...
- 洛谷 p6858 深海少女与胖头鱼 洛谷月赛 期望dp
洛谷10月月赛 2 t2 深海少女与胖头鱼 题目链接 参考资料:洛谷10月赛2讲评ppt; 本篇题解考完那天就开始写,断断续续写到今天才写完 本题作为基础的期望dp题,用来学习期望dp还是很不错的 ( ...
- 洛谷 4933 洛谷10月月赛II T2 大师
[题解] f[i][j]表示最后一个数为h[i],公差为j的等差数列的个数.n方枚举最后一个数和倒数第二个数转移即可.注意公差可能为负数,需要移动为正数再作为下标. #include<cstdi ...
- 洛谷P4719 动态dp
动态DP其实挺简单一个东西. 把DP值的定义改成去掉重儿子之后的DP值. 重链上的答案就用线段树/lct维护,维护子段/矩阵都可以.其实本质上差不多... 修改的时候在log个线段树上修改.轻儿子所在 ...
- 2018普及组摆渡车洛谷5017(dp做法)
啦啦啦,这一篇是接上一篇的博客,上一篇是记忆化搜索,而这一篇是dp+前缀和小技巧 dp这种玄学做法我这种蒟蒻当然不是自己想出来的,参考https://blog.csdn.net/kkkksc03/ar ...
- 洛谷P3975 跳房子 [DP,单调队列优化,二分答案]
题目传送门 跳房子 题目描述 跳房子,也叫跳飞机,是一种世界性的儿童游戏,也是中国民间传统的体育游戏之一. 跳房子的游戏规则如下: 在地面上确定一个起点,然后在起点右侧画 n 个格子,这些格子都在同一 ...
- 洛谷1373(dp)
常规线性dp,需要时就加一维.\(dp[i][j][t][s]\)表示在点\((i,j)\)时瓶子里剩\(t\)且为\(s\)走(0代表小a,1代表uim)时的方案数. de了半天发现是初次尝试的快速 ...
- 洛谷P4719 动态DP —— 动态DP(树剖+矩乘)
题目:https://www.luogu.org/problemnew/show/P4719 感觉这篇博客写得挺好:https://blog.csdn.net/litble/article/detai ...
- 洛谷1280(dp)
题目性质:1.当前节点空闲则必须做任务,而不是可选可不选:2.然而前面的如果能覆盖当前节点,就可以不选. 解决方法:倒着扫可以很好地解决这两个问题.dp[i]为时刻i可得的最大空闲时间.如果此刻没有任 ...
随机推荐
- linux初步学习有感
经过了一段时间对linux的接触,从最开始接触到的deepin到后来我最喜欢的KaliLinux,感受到了这个我曾经并不了解的操作系统的独特魅力. 我是到了大学才知道linux这个系统的,但是在小时候 ...
- 虚拟机上CentOS-6.9-x86_64系统安装教程
最近想学学Linux系统如何使用,于是想用VM安装虚拟机学习一下. linux系统比较多,我这里用的是CentOS-6.9-x86_64 一.下载系统 下载地址:https://www.centos. ...
- 18年多校-1002 Balanced Sequence
>>点击进入原题测试<< 思路:自己写没写出来,想不通该怎么排序好,看了杜神代码后补题A掉的.重新理解了一下优先队列中重载小于号的含义,这里记录一下这种排序方式. #inclu ...
- python 线程进程
一 线程的2种调用方式 直接调用 实例1: import threading import time def sayhi(num): #定义每个线程要运行的函数 print("runni ...
- [luoguP1095] 守望者的逃离(DP)
传送门 这题....得考虑一些奇奇怪怪的复杂情况 不过也有简便方法. 枚举时间,先算出来只用魔法走的时间. 然后再枚举一遍时间,再算只走的时间,两个比较一下,取最游值. 代码 #include < ...
- Linux下汇编语言学习笔记76 ---
这是17年暑假学习Linux汇编语言的笔记记录,参考书目为清华大学出版社 Jeff Duntemann著 梁晓辉译<汇编语言基于Linux环境>的书,喜欢看原版书的同学可以看<Ass ...
- org.apache.maven.archiver.MavenArchiver.getManifest(org.apache.maven.project.MavenProject, org.apach
https://www.cnblogs.com/wxymg/p/8630471.html
- 武大OJ 612. Catch the sheep
Description Old Sama is a great and powerful magician in the word. One day, a little girl, Anny, tou ...
- 通过DaoCloud发布Ghost
首先参考这篇文章: http://docs-static.daocloud.io/daocloud-services/volume-controller 但是按照这篇文章,最后的主题是没有办法应用上去 ...
- python 元组不变 列表可变
python 元组不变 列表可变 1, --元组,注意要有逗号: [1] --列表 竟然才开始写python blog: