[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有关 转移方法 维护一个单调递增(减)的队列,可以在两头弹出元素,一 ...
随机推荐
- android手机rootROM下载地址
https://download.mokeedev.com/ https://download.lineageos.org/
- apc smart UPS下使用apcupsd注意事项
公司的apc smart UPS安装有管理卡(似乎是AP-9631),server环境有FreeBSD.Windows Server.Linux(CentOS.Ubuntu) 实际使用中有例如以下问题 ...
- VS2012关于hash_map的使用简略
VS关于hash_map使用的一些经常使用构造方法汇总,包含基本类型和结构体,相信够一般模仿使用: # include<hash_map> #include<iostream> ...
- Effective JavaScript Item 39 绝不要重用父类型中的属性名
本系列作为Effective JavaScript的读书笔记. 假设须要向Item 38中的Actor对象加入一个ID信息: function Actor(scene, x, y) { this.sc ...
- Bean Query 第一个版本号(1.0.0)已公布
BeanQuery 是一个把对象转换为Map的Java工具库. 支持选择Bean中的一些属性.对结果进行排序和依照条件查询. 不只能够作用于顶层对象,也能够作用于子对象.很多其它具体的介绍能够看我的博 ...
- Hadoop 解除 “Name node is in safe mode”
运行Hadoop程序时,有时候会报以下错误: org.apache.hadoop.dfs.SafeModeException: Cannot delete /user/hadoop/input. N ...
- LeetCode 1.两数之和(JS)
Given an array of integers, return indices of the two numbers such that they add up to a specific ta ...
- YTU 2852: 二分查找
2852: 二分查找 时间限制: 1 Sec 内存限制: 128 MB 提交: 215 解决: 79 题目描述 输入不多于20个升序排列的整数,以及一个待查找的数key,输出key在序列中的位置( ...
- Ubuntu linux 返回上一次访问的目录
cd - (cd空格 减号)返回最近一次访问的目录 这个非常方便.平时经常用终端切换目录,能够方便地回到原来的目录就很爽了. jiqing@jiqing-pad:/usr/local/redis/sr ...
- 洛谷P3004 宝箱Treasure Chest——DP
题目:https://www.luogu.org/problemnew/show/P3004 似乎有点博弈的意思,但其实是DP: f[i][j] 表示 i~j 的最优结果,就可以进行转移: 注意两个循 ...