【洛谷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可得的最大空闲时间.如果此刻没有任 ...
随机推荐
- Django-django-redis使用
自定义连接池 这种方式跟普通py文件操作redis一样,代码如下: views.py import redis from django.shortcuts import render,HttpResp ...
- saltstack(三) grains、pillar的使用
一,grains grains: 这个跟puppet的facter功能一样.主要负责采集客户端一些基本信息, 这个也完全可以自定义,可以在客户端自定义,然后自动汇报上来:也可以从服务器端定义然后推下去 ...
- foreach获取访问元素的下标
今天在用foreach循环的时候,要同时根据访问下标获取另一个list对象数据,之前想的方法是加一个变量i,然后每次i++,但是感觉这样不是很好!,后来发现这样也可以!举个简单的例子! foreach ...
- 【07】AngularJS Filters
AngularJS Filters 过滤器可以使用一个管道字符(|)添加到表达式和指令中. AngularJS 过滤器 AngularJS 过滤器可用于转换数据: 过滤器 描述 currency[ˈk ...
- Spring MVC学习总结(8)——Swagger入门详解
前言 Swagger 是一款RESTFUL接口的文档在线自动生成+功能测试功能软件.本文简单介绍了在项目中集成swagger的方法和一些常见问题.如果想深入分析项目源码,了解更多内容,见参考资料. S ...
- [luoguP1072] Hankson 的趣味题(数论)
传送门 由题意得 gcd(x, a0) = a1 ——> gcd(x / a1, a0 / a1) = 1 lcm(x, b0) = b1 ——> x * b0 / gcd(x, b0) ...
- [luoguP1901] 发射站(单调栈)
传送门 呵呵 ——代码 #include <cstdio> #include <iostream> #define N 1000010 #define LL long long ...
- [luoguP2680] 运输计划(lca + 二分 + 差分)
传送门 暴力做法 50 ~ 60 枚举删边,求最大路径长度的最小值. 其中最大路径长度运用到了lca 我们发现,求lca的过程已经不能优化了,那么看看枚举删边的过程能不能优化. 先把边按照权值排序,然 ...
- codeforces 371D
#include<stdio.h> #define N 210000 struct node { int x,next; __int64 count,vec; }pre[N]; int n ...
- Ubuntu 16.04安装BleachBit清理系统垃圾文件
在LInux下不同于Windows会产生系统垃圾,但是Linux会产生安装软件时的依赖包,比如卸载一个软件,其依赖包是不会删除的.但是可以通过以下命令解决: #清理旧版本的软件缓存 sudo apt- ...