牛客挑战赛17E 跳格子 计数dp
!!!学长做过的题
正解:计数dp
解题报告:
首先思考,这题和普通的走台阶有什么区别嘛(跳格子其实和走台阶都一样的嘛quq因为走台阶比较经典所以就说的走台阶)
那显然最大的区别就是它有限制 umm,,,有点废话?
这个限制相当于你可以理解成,我现在可以走两次,都是从头走到尾(本来是从头到尾再走回头嘛但反过来显然一样,懒得解释辽你不傻趴
但是第二次走的得是第一次走的子集
于是先考虑第二次怎么走,就只要算包含这个元素的集合有多少个,就是第一次走这段路所有可行方案的总和了
然后关于包含这个元素的这一段的第一种做法的可能性,显然我们是可以,预处理出来的
然后就大概可以递推出来辽
首先,如果我们要在第二次迈长度为$i$的一步,我们需要第一次从它的上一步走到这个地方
显然的一个事情是,第一次从某一个地方走长度为i的一段路的方案数与它的位置是无关的,只是个排列组合问题
于是预处理出一个$g_i$表示第二次迈长度为$i$的一步对于第一次的可行方案数是多少,再设$f_i$表示第二次跳到点$i$的方案数是多少
转移就$f_{i}=\sum f_{j}\cdot g_{i-j}$
$over$
最后放下代码就完美结束辽!
#include<bits/stdc++.h>
#define rp(i,x,y) for(register int i=x;i<=y;++i)
using namespace std;
const int N=5e5+,mod=;
int f[N],g[N],val[N];
inline int read()
{
char ch=getchar();int x=;bool y=;
while(ch!='-' && (ch>'' || ch<''))ch=getchar();
if(ch=='-')ch=getchar(),y=;
while(ch>='' && ch<='')x=(x<<)+(x<<)+(ch^''),ch=getchar();
return y?x:-x;
}
inline void cal(int &a,int b){a+=b;a%=mod;}
int main()
{
int T=read();
while(T--)
{
int sum=read(),n=read(),m=read();
memset(f,,sizeof(f));memset(g,,sizeof(g));g[]=f[]=;
rp(i,,m) rp(j,,n) cal(g[i+j],g[i]);
rp(i,,sum-) rp(j,,m) cal(f[i+j],1ll*f[i]*g[j]%mod);
cout<<f[sum]<<endl;
}
return ;
}
code
牛客挑战赛17E 跳格子 计数dp的更多相关文章
- 牛客挑战赛 39 牛牛与序列 隔板法 容斥 dp
LINK:牛牛与序列 (牛客div1的E题怎么这么水... 还没D难. 定义一个序列合法 当且仅当存在一个位置i满足 $a_i>a_,a_j<a_$且对于所有的位置i,$1 \leq a_ ...
- 牛客挑战赛30 小G砍树 树形dp
小G砍树 dfs两次, dp出每个点作为最后一个点的方案数. #include<bits/stdc++.h> #define LL long long #define fi first # ...
- 牛客挑战赛33 F 淳平的形态形成场(无向图计数,EGF,多项式求逆)
传送门: 淳平的形态形成场 题解: 把a排序后,直接统计答案恰好为a[i]并不好做,可以统计答案>a[i]的方案数,设为\(f[i]\). 即不存在一个联通块,所有的权值都<=a[i]. ...
- 5.15 牛客挑战赛40 C 小V和字符串 数位dp 计数问题
LINK:小V和字符串 容易想到只有1个数相同的 才能有贡献. 知道两个01串 那么容易得到最小步数 大体上就是 第一个串的最前的1和第二个串最前的1进行匹配. 容易想到设f[i][j]表示 前i位1 ...
- 牛客挑战赛 30 A 小G数数
题目链接:https://ac.nowcoder.com/acm/contest/375/A 分析:我写的时候竟然把它当成了DP....... 还建了个结构体DP数组,保存一二位,不知道当时脑子在抽啥 ...
- 牛客练习赛35-背单词-线性DP
背单词 思路 :dp[ i ] [ 0 ]表示 第i 位放的元音 dp[ i ] [ 1 ]表示 第i 位放的辅音 ,cnt [ i ]含义是 长度为 i 的方案数. 转移 :dp[ i ] ...
- 牛客挑战赛30-T3 小G砍树
link 题目大意: n个节点的带标号无根树.每次选择一个度数为1的节点并将它从树上移除.问总共有多少种不同的方式能将这棵树删到只剩 1 个点.两种方式不同当且仅当至少有一步被删除的节点不同. 题解: ...
- 良心送分题(牛客挑战赛35E+虚树+最短路)
目录 题目链接 题意 思路 代码 题目链接 传送门 题意 给你一棵树,然后把这棵树复制\(k\)次,然后再添加\(m\)条边,然后给你起点和终点,问你起点到终点的最短路. 思路 由于将树复制\(k\) ...
- Luogu5611 Ynoi2013 D2T2/牛客挑战赛32F 最大子段和 分块、分治
传送门 之前一直咕着的,因为一些特殊的原因把这道题更掉算了-- 有一个对值域莫队+线段树的做法,复杂度\(O(n\sqrt{n} \log n)\)然而牛客机子实在太慢了没有希望(Luogu上精细实现 ...
随机推荐
- 巧用 PHP 数组函数
0x00 前言 PHP 的数组是一种很强大的数据类型,与此同时 PHP 内置了一系列与数组相关的函数可以很轻易的实现日常开发的功能.但是我发现好像很多小伙伴都忽略了内置函数的作用(比如我自己就编写过一 ...
- oracle函数 NEW_TIME(dt1,c1,c2)
[功能]:给出时间dt1在c1时区对应c2时区的日期和时间 [参数]:dt1,d2 日期型 [返回]:日期时间 [参数]:c1,c2对应的 时区及其简写 大西洋标准时间:AST或ADT 阿拉斯加_夏威 ...
- oracle函数 SUBSTR(c1,n1[,n2])
[功能]取子字符串 [说明]多字节符(汉字.全角符等),按1个字符计算 [参数]在字符表达式c1里,从n1开始取n2个字符;若不指定n2,则从第y个字符直到结束的字串. [返回]字符型 [示例] SQ ...
- @loj - 3039@ 「JOISC 2019 Day4」蛋糕拼接 3
目录 @description@ @solution@ @accepted code@ @details@ @description@ 今天是 IOI 酱的生日,所以她的哥哥 JOI 君给她预定了一个 ...
- oracle函数 exp(y)
[功能]返回e的y次幂(e为数学常量) [参数]y,数字型表达式 [返回]数字 [示例] select exp(3),exp(0),exp(-3) from dual; 返回:20.0855369,1 ...
- HTML静态网页--JavaScript-DOW操作
1.DOM的基本概念 DOM是文档对象模型,这种模型为树模型:文档是指标签文档:对象是指文档中每个元素:模型是指抽象化的东西. 2.Windows对象操作 一.属性和方法: 属性(值或者子对象): o ...
- 【t074】上学路线
Time Limit: 1 second Memory Limit: 128 MB [问题描述] 你所在城市的街道好像一个棋盘,有a条南北方向的街道,和b条东西方向的街道. 南北方向的a条街道从西到东 ...
- 【t079】火星上的加法运算
Time Limit: 1 second Memory Limit: 128 MB [问题描述] 最近欢欢看到一本有关火星的书籍,其中她被一个加法运算所困惑,由于她的运算水平有限,想向你求助,作为一名 ...
- elasticsearch-倒排索引原理
倒排索引 Elasticsearch 使用一种称为 倒排索引 的结构,它适用于快速的全文搜索.一个倒排索引由文档中所有不重复词的列表构成,对于其中每个词,有一个包含它的文档列表. 例如,假设我们有两个 ...
- jq常用事件
https://www.cnblogs.com/sandraryan/ click(); 点击事件 dblclick(); 双击事件 $('.box').dblclick(function(){ al ...