[ZPG TEST 118] 最大值【dp+离线】
题4 最大值(findmax)
【题目描述】
找到一个数组的最大值的一种方法是从数组开头从前到后对数组进行扫描,令max=a[0](数组下表从0..N-1),如果a[i]>max,就更新max,这样就可以在O(N)的时间里找到一个数组的最大值。
这个问题是相当简单的,但是想到了另一个问题,如果一个包含N个元素的数组a里面的元素的值是在1...K之间的整数,存在多少个不同的数组a,进行了如上扫描之后,max恰好进行了P次更新?
下面是N = 4,K = 3,P = 2时所有情况
1) {1,1,2,3}
2) {1,2,1,3}
3) {1,2,2,3}
4) {1,2,3,1}
5) {1,2,3,2}
6) {1,2,3,3}
共有6种情况
由于答案可能很大,所以你仅仅需要把答案mod (10^9+7)输出。
【输入格式】
输入文件findmax.in的第一行T,本题有T组数据。
接下来T行,每行三个整数N,K,P
【输出格式】
输出文件findmax.out包括T行,每行一个答案。
【样例输入】
3
4 3 2
2 3 1
3 4 1
【样例输出】
6
3
30
【数据规模】
30%数据
T=1
1 <= n <= 10
1 <= K <= 2
0 <= P < n
60%数据
T=1
1 <= n <= 50
1 <= K <= 10
0 <= P < n
100%数据
1 <= T <= 100
1 <= n <= 100
1 <= K <= 300
0 <= P < n
我说什么鬼,100 * 100 * 300 * 100还能不炸?原来离线了。。。
令f(i, j, k)表示前i个数,最大值为j,更新了k次的方案数,则
f(i, j, k) = f(i - 1, j, k) * j + f(i - 1, 1, k - 1) + f(i - 1, 2, k - 1) + ... + f(i - 1, j - 1, k - 1)
用s(i, j, k)表示f(i, 1, k) + f(i, 2, k) + ... + f(i, j, k),则
f(i, j, k) = f(i - 1, j, k) * j + s(i - 1, j - 1, k - 1),
其中f(i - 1, j, k) * j表示最大值不变,则第i位可以是闭区间[1, j]之间的数,s(i - 1, j - 1, k - 1)表示最大值更新为j。
#include <cstdio>
#include <cstring> const int maxn = 105, mod = 1000000007; int T, n, max_k, p;
long long f[maxn][305][maxn], s[maxn][305][maxn]; int main(void) {
freopen("findmax.in", "r", stdin);
freopen("findmax.out", "w", stdout);
scanf("%d", &T);
for (int j = 1; j < 301; ++j) {
f[1][j][0] = 1;
s[1][j][0] = j;
}
for (int i = 2; i < 101; ++i) {
for (int j = 1; j < 301; ++j) {
f[i][j][0] = (f[i - 1][j][0] * j) % mod;
s[i][j][0] = (s[i][j - 1][0] + f[i][j][0]) % mod;
for (int k = 0; k < 101; ++k) {
f[i][j][k] = (f[i - 1][j][k] * j + s[i - 1][j - 1][k - 1]) % mod;
s[i][j][k] = (s[i][j - 1][k] + f[i][j][k]) % mod;
}
}
}
while (T--) {
scanf("%d%d%d", &n, &max_k, &p);
printf("%d\n", s[n][max_k][p]);
}
return 0;
}
[ZPG TEST 118] 最大值【dp+离线】的更多相关文章
- 蓝桥杯 求最大值 dp
这题很暴力的一个DP,d[i][j]表示前i个数对选择一些Ai的和为j的最大Bi和. 状态转移方程: dp[i][j]=max(dp[i][j],dp[i-1][j-sc[i].a]+sc[i].b) ...
- 959F - Mahmoud and Ehab and yet another xor task xor+dp(递推形)+离线
959F - Mahmoud and Ehab and yet another xor task xor+dp+离线 题意 给出 n个值和q个询问,询问l,x,表示前l个数字子序列的异或和为x的子序列 ...
- hrbust1841再就业(状态压缩dp)
本人刚学压缩dp,只能对这些水题写题解 一方面对自己的理解有加深作用 另一方面希望和各位大牛交流交流..... 如果有对状态dp不太了解的童鞋可以参考入门知识:http://wenku.baidu.c ...
- 17996 Daily Cool Run (dp)
时间限制:1000MS 内存限制:65535K 提交次数:0 通过次数:0 题型: 编程题 语言: 不限定 Description Daily Cool Run is a popular gam ...
- HDU 1520 树形dp裸题
1.HDU 1520 Anniversary party 2.总结:第一道树形dp,有点纠结 题意:公司聚会,员工与直接上司不能同时来,求最大权值和 #include<iostream> ...
- hdu 1561 The more, The Better(树形dp,基础)
The more, The Better Time Limit: 6000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Oth ...
- 树形DP +01背包(HDU 1011)
题意:有n个房间,有n-1条道路连接着n个房间,每个房间都有若干个野怪和一定的能量值,有m个士兵从1房间入口进去,到达每个房间必须要留下若干士兵杀死所有的野怪,然后其他人继续走,(一个士兵可以杀死20 ...
- HDU 1024:Max Sum Plus Plus(DP)
http://acm.hdu.edu.cn/showproblem.php?pid=1024 Max Sum Plus Plus Problem Description Now I think you ...
- DP总结 ——QPH
常见优化 单调队列 形式 dp[i]=min{f(k)} dp[i]=max{f(k)} 要求 f(k)是关于k的函数 k的范围和i有关 转移方法 维护一个单调递增(减)的队列,可以在两头弹出元素,一 ...
随机推荐
- 解决maven Generating project in Interactive mode
在idea建一个基于maven结构的web项目时,cmd输出卡死在Generating project in Interactive mode不动了 用命令mvn archetype:generate ...
- 【algorithm】尾递归
尾递归和一般的递归不同在对内存的占用,普通递归创建stack累积而后计算收缩,尾递归只会占用恒量的内存(和迭代一样).SICP中描述了一个内存占用曲线,用以上答案中的Python代码为例(普通递归): ...
- 【网络】TCP的拥塞控制
一.拥塞控制的一般原理 拥塞:对网络中某一资源的需求超过了该资源所能提供的可用部分 拥塞控制是防止过多的数据注入到网络,这样可以使网络中的路由器或链路不致过载,拥塞控制是一个全局性的过程. 流量控制往 ...
- 项目中遇到的HQL查询问题
问题描写叙述: 目的:想要查询出全部最新版本号的组件 说明:组件:版本号 =1:n关系 ,假设这个组件仅仅有一个版本号也要可以查出来. 项目中使用的是内存数据库,无法看到表结构,这里的样例仅仅用于模拟 ...
- RabbitMQ通过shovel插件迁移数据
前言 生产环境中会遇到RabbitMQ数据迁移的场景,例如:切换云服务厂商.不同Region之间数据迁移.新搭建RabbitMQ实例,数据需要同步至新的RabbitMQ实例. 前提条件: 源Rabbi ...
- ym——优化你的Java代码(新)
转载请注明本文出自Cym的博客(http://blog.csdn.net/cym492224103),谢谢支持! 1.面向对象的3要素. 2.面向对象开发的6大原则. 1.单一职责原则 应该有且仅有一 ...
- Attribute(特性)
一向都觉得.NET的Attribute好神秘.一个方框框住的东西,置身于类.方法的头部,本身不在类或方法里面,但又会起作用,有时作用还很大,仿佛充满了魔力.简直给人一种无冕之王,幕后之黑手的感觉! 某 ...
- SQLServer导出导出单表数据
1.SQLServer导出单表数据为TXT文件 数据库--任务--导出数据
- Override is not allowed when implementing interface method Bytecode Version Overriding and Hiding Methods
java - @Override is not allowed when implementing interface method - Stack Overflow https://stackove ...
- accp
ACCP(Aptech Certified Computer Professional)是印度最早从事IT职业教育的Aptech计算机教育公司推出的培养软件程序设计人员的课程体系,由北大青鸟集团于20 ...