PIPI1091 编程课奖励(滚动数组+dp)
题目描述
PIPI老师的Java编程课有N名同学参加了期末考试,现在他们在PIPI老师办公室门外排成一排,领取奖励。
PIPI老师决定奖励他们每人若干颗爪哇咖啡豆。具体规则如下:
每人奖励至少一颗,最多K颗咖啡豆。
对于前后相邻的2名同学,如果他们期末分数一样,那么他们得到的咖啡豆数量也要一样;否则分数高的同学得到较多的咖啡豆。
现在按他们排队的顺序给定每名同学的期末考试分数,请你计算PIPI老师有多少种不同的奖励方法满足以上规则。由于方案数可能非常多,你只需要输出模1000000007的结果即可。
输入
多组数据
第一行包含两个N和K。
第二行包含N个整数A1, A2, ... AN。
1 <= N <= 100000
1 <= K <= 100
0 <= Ai <= 100
输出
输出一个整数,代表一共有多少不同方案,对1000000007取模
样例输入
3 3 88 100 90
样例输出
5
- dp[i][j]表示第i个数放j的方案数
- 初值dp[0][i] = 1
- 当a[i] > a[j]时,dp[i][j] = dp[i][j-1] + dp[i-1][j-1]; dp[i][1] = 0;
- 当a[i] < a[j]时,dp[i][j] = dp[i][j+1] + dp[i-1][j+1]; dp[i][k] = 0;
- 记录时不需要存重复的数
int dp[2][k];
for (int i = 1; i <= k; i++) {dp[0][i] = 1;
}
for (int i = 1; i <= cnt; i++) {if (a[i] > a[i-1]) {dp[i%2][1] = 0;for (int j = 2; j <= k; j++) {dp[i%2][j] = dp[i%2][j-1] + dp[(i-1)%2][j-1];dp[i%2][j] %= M;}} else if (a[i] < a[i-1]) {dp[i%2][k] = 0;for (int j = k - 1; j >= 1; j--) {dp[i%2][j] = dp[i%2][j+1] + dp[(i-1)%2][j+1];dp[i%2][j] %= M;}}
}
int ans = 0;
for (int i = 1; i <= k; i++) {ans += dp[cnt%2][i];ans %= M;
}
cout << ans << endl;
PIPI1091 编程课奖励(滚动数组+dp)相关推荐
- Gym 100507G The Debut Album (滚动数组dp)
The Debut Album 题目链接: http://acm.hust.edu.cn/vjudge/contest/126546#problem/G Description Pop-group & ...
- dp笔记:关于DP算法和滚动数组优化的思考
从网上总结了一些dp的套路以及对滚动数组的一些思考,现记录如下,希望以后回顾此类算法时会有所帮助. 目录 1.DP算法经验 1.DP算法核心: 2.DP算法类别以及例题 例1:三步问题 例2:最小路径 ...
- 洛谷 P2679 子串 【dp神题】【滚动数组】【2015 noip d2t2】
偷个懒,题解看这里:https://www.luogu.org/problemnew/solution/P2679 看作者 GuessYCB 写的 ===2018.9.6=== 这一次算理解深一点了 ...
- HDU 1176 免费馅饼 矩阵取数, dp + 滚动数组
http://acm.hdu.edu.cn/showproblem.php?pid=1176 首先可以处理出整张地图的状态. book[T][POS]表示第T秒,在第pos个地方有多少个馅饼. dp[ ...
- Top Secret Task(dp+滚动数组)
传送门: 题目 dp[i][j][k] 表示 考虑到第i个数 计算前j个数的和 进行了k次操作 则有 若不把第i个数放入前j个数中 dp[i][j][k] = dp[i-1][j][k] 若把第i个数 ...
- HDU 5617 Jam's maze dp+滚动数组
题目链接: hdu: http://acm.hdu.edu.cn/showproblem.php?pid=5617 bc(中文): http://bestcoder.hdu.edu.cn/contes ...
- 【牛客 - 188D 】愤怒(01滚动数组优化dp,括号匹配方案个数,tricks)
题干: 小w很生气 小w有一个长为n的括号序列 愤怒小w想把这个括号序列分为两个括号序列 小w想让分为的这两个括号序列同时合法 小w想知道一共有多少种划分方案 (划分的意思是划分为两个子序列) 注意两 ...
- 【NOIP2015提高组】子串 区间DP+滚动数组优化
题意: 有两个仅包含小写英文字母的字符串 A 和 B. 现在要从字符串 A 中取出 k 个互不重叠的非空子串,然后把这 k 个子串按照其在字符串 A 中出现的顺序依次连接起来得到一个新的字符串. 请问 ...
- 【BZOJ1044】【tyvj3511】【codevs1870】木棍分割,二分答案+滚动数组+前缀和DP
传送门1 传送门2 传送门3 写在前面:就我看来,这是一道不错的题 思路: 一.对于"求总长度最大的一段的长度最小值"这个问题,我们比较容易想到二分答案然后判断是否合法,显然这个是 ...
- 【滚动数组】【状压dp】Gym - 100956F - Colored Path
f(i,j,S)表示到(i,j),且经由的路径上的颜色集合为S的价值的最小值,从上方和左方转移过来即可. 要注意,内存不足,需要滚动数组优化,即使用了map,还是需要. 路径输出的时候,可以再跑一遍d ...
最新文章
- php 立即释放session 去除其缓存,ThinkPHP关于session无法清除的一个小问题
- Oracle性能误区--MTS,RAC,分区,并行查询
- CanvasRenderingContext2D(渲染上下文对象)
- ROS 创建msg和srv 编写发布者和订阅者节点 编写服务端和客户端节点(python版本)
- 【软件质量】修正瑞士军刀枚举类
- [转]Java 通过JDBC连接Mysql数据库的方法和实例【图文说明】
- linux c++ utf8 gbk,Linux C++ gbk转为utf-8
- Vue2学习笔记:计算属性(computed)
- 你所不知道的JavaScript数组
- Object-C学习(一)——类别的创建、实现及调用
- c语言ABCDEF前中后序遍历,c语言实现二叉树及前中后序遍历
- 内网地址映射为外网地址方法
- 整理一下国内比较便宜的云主机
- 刘强东带到石头村什么宝贝?飞翔鸽、“村长刘”品牌、歌唱家!
- 美国计算机科学专业学校排名,美国计算机科学专业排名
- C++实现Point类
- Excel:通过简称查找全称,VLOOKUP函数
- Java多线程分批处理数据
- 智能识别收货地址(支持vue)/省市区街道四级联动
- 救急修复17款MacBook Pro键盘出现某些健按一下被识别成两下,然后打出2个字母的情况