题目描述

对于一个数列A[1..N],一种寻找最大值的方法是:依次枚举A[2]到A[N],如果A[i]比当前的A[1]值要大,那么就令A[1]=A[i],最后A[1]为所求最大值。假设所有数都在范围[1, K]内,按上面的步骤执行,有多少个长度N的数列满足A[1]被更新的次数恰好为P呢?

输入

本题有多组数据。输入第一行一个数T为数据组数,下面T行每行依次三个数N、K和P。

输出

对每组数据输出一行,为方案数模1000000007的值。

样例输入

3
4 3 2
2 3 1
3 4 1

样例输出

6
3
30


题解

dp

设 $f[i][j][k]$ 表示 $i$ 个数,更新次数为 $j$ ,最大值为 $k$ 的方案数。

那么考虑第 $i$ 个数是否对最大值产生更新来进行转移:

当不产生更新时,前面最大值为 $k$ ,第 $i$ 个数的取值范围为 $[1,k]$ ,因此 $f[i][j][k]=f[i-1][j][k]*k$ ;

当产生更新时,前面最大值取值范围为 $[1,k-1]$ ,第 $i$ 个数的取值为 $k$ ,因此 $f[i][j][k]=\sum\limits_{l=1}^{k-1}f[i-1][j-1][l]$ 。

因此使用前缀和 $sum[i][j][k]=\sum\limits_{l=1}^kf[i][j][l]$ 来优化dp转移,即可预处理出所有的dp值。

最后对于每个询问直接输出答案即可。

时间复杂度 $O(npk)$

#include <cstdio>
#define mod 1000000007
long long sum[155][155][310];
int main()
{
int i , j , k , T , x , y , z;
for(i = 1 ; i <= 300 ; i ++ ) sum[1][1][i] = i;
for(i = 2 ; i <= 150 ; i ++ )
for(j = 1 ; j <= 150 ; j ++ )
for(k = 1 ; k <= 300 ; k ++ )
sum[i][j][k] = (sum[i][j][k - 1] + sum[i - 1][j - 1][k - 1] + (sum[i - 1][j][k] - sum[i - 1][j][k - 1]) * k % mod + mod) % mod;
scanf("%d" , &T);
while(T -- ) scanf("%d%d%d" , &x , &y , &z) , printf("%lld\n" , sum[x][z + 1][y]);
return 0;
}

【bzoj2699】更新 dp的更多相关文章

  1. ZOJ 3632 Watermelon Full of Water (线段树 区间更新 + dp)

    题目大意: 让每天都能吃到西瓜. 最少须要花多少钱. 思路分析: dp[pos] 就表示  要让 前i天每天都有西瓜吃.最少须要花多少钱. 那么假设你买这个西瓜的话. 那么这个西瓜能吃的持续时间都要更 ...

  2. 持续更新——dp的一些技巧

    共菜鸡笔者看的--会慢慢更新,也请看到的大佬留意一眼,指出不足. 对于一些对部分点的二维\(dp\),状态从左上角继承而来时,对于一个点\((x,y)\),对它编号\(x*m+y\),按照这个顺序\( ...

  3. bzoj2699 更新

    题意 对于一个数列A[1..N],一种寻找最大值的方法是:依次枚举A[2]到A[N],如果A[i]比当前的A[1]值要大,那么就令A[1]=A[i],最后A[1]为所求最大值.假设所有数都在范围[1, ...

  4. DP专题(不定期更新)

    1.UVa 11584 Partitioning by Palindromes(字符串区间dp) 题意:给出一个字符串,划分为若干字串,保证每个字串都是回文串,同时划分数目最小. 思路:dp[i]表示 ...

  5. poj3311 Hie with the Pie (状态压缩dp,旅行商)

    Hie with the Pie Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 3160   Accepted: 1613 ...

  6. fzu2188 状压dp

    G - Simple String Problem Time Limit:2000MS     Memory Limit:32768KB     64bit IO Format:%I64d & ...

  7. LightOJ1283 Shelving Books(DP)

    题目 Source http://www.lightoj.com/volume_showproblem.php?problem=1283 Description You are a librarian ...

  8. [poj3017] Cut the Sequence (DP + 单调队列优化 + 平衡树优化)

    DP + 单调队列优化 + 平衡树 好题 Description Given an integer sequence { an } of length N, you are to cut the se ...

  9. CodeForces #369 C. Coloring Trees DP

    题目链接:C. Coloring Trees 题意:给出n棵树的颜色,有些树被染了,有些没有.现在让你把没被染色的树染色.使得beauty = k.问,最少使用的颜料是多少.   K:连续的颜色为一组 ...

随机推荐

  1. linux 网络编程 2---(TCP编程)

    流程 服务器:server 创建套接字 socket( ) 填充服务器网络信息结构体 sockaddr_in 将套接字与服务器网络信息结构体绑定 bind( ) 将套接字设置为被动监听状态 liste ...

  2. create a nodejs npm package

    1. create a folder named m1 2. run command: npm init, this will create the package.json file 3. crea ...

  3. P1199 三国游戏

    题目描述 小涵很喜欢电脑游戏,这些天他正在玩一个叫做<三国>的游戏. 在游戏中,小涵和计算机各执一方,组建各自的军队进行对战.游戏中共有 N 位武将(N为偶数且不小于 4),任意两个武将之 ...

  4. 北京Uber优步司机奖励政策(1月4日)

    滴快车单单2.5倍,注册地址:http://www.udache.com/ 如何注册Uber司机(全国版最新最详细注册流程)/月入2万/不用抢单:http://www.cnblogs.com/mfry ...

  5. 成都Uber优步司机奖励政策(3月4日)

    滴快车单单2.5倍,注册地址:http://www.udache.com/ 如何注册Uber司机(全国版最新最详细注册流程)/月入2万/不用抢单:http://www.cnblogs.com/mfry ...

  6. MFC 中的设计模式分析

    MFC 中的设计模式分析 最近在学习设计模式,突然想到MFC里面其实也包含有设计模式的原理,于是分析了一下,做一个笔记,网上也找了一些资料,在此一并感谢. 创建型模式 单例模式(Singleton P ...

  7. FCL中你不得不知的几种委托

    FCL中丰富的类库信息极大的方便了我们的编码,很多我们日常经常用到的类型,FCL中已经帮我们定义好,下面要介绍的就是FCL中定义好的几种委托类型,直接使用它们不仅能提高我们的编码效率,而且还能让我们的 ...

  8. 你的APK安全吗?来WeTest免费测!

    腾讯安全联合实验室就曾在<2018上半年互联网黑产研究报告>指出,移动端黑产规模宏大,恶意推广日均影响用户超过千万. 尤其在网络强相关的APP流行年代,当APP应用客户端上传与获取信息,大 ...

  9. 「日常训练」Card Game Cheater(HDU-1528)

    题意与分析 题意是这样的:有\(n\)张牌,然后第一行是Adam的牌,第二行是Eve的牌:每两个字符代表一张牌,第一个字符表示牌的点数,第二个表示牌的花色.Adam和Eve每次从自己的牌中选出一张牌进 ...

  10. system_Class类说明文档

    system_Class类是FastCMS系统必须的,全局对象system是system_Class的实例,其主要包含二类操作: 1.token 操作: token可以存储当前访客的私有信息,取代se ...