题目描述

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)相关推荐

  1. Gym 100507G The Debut Album (滚动数组dp)

    The Debut Album 题目链接: http://acm.hust.edu.cn/vjudge/contest/126546#problem/G Description Pop-group & ...

  2. dp笔记:关于DP算法和滚动数组优化的思考

    从网上总结了一些dp的套路以及对滚动数组的一些思考,现记录如下,希望以后回顾此类算法时会有所帮助. 目录 1.DP算法经验 1.DP算法核心: 2.DP算法类别以及例题 例1:三步问题 例2:最小路径 ...

  3. 洛谷 P2679 子串 【dp神题】【滚动数组】【2015 noip d2t2】

    偷个懒,题解看这里:https://www.luogu.org/problemnew/solution/P2679 看作者 GuessYCB  写的 ===2018.9.6=== 这一次算理解深一点了 ...

  4. HDU 1176 免费馅饼 矩阵取数, dp + 滚动数组

    http://acm.hdu.edu.cn/showproblem.php?pid=1176 首先可以处理出整张地图的状态. book[T][POS]表示第T秒,在第pos个地方有多少个馅饼. dp[ ...

  5. Top Secret Task(dp+滚动数组)

    传送门: 题目 dp[i][j][k] 表示 考虑到第i个数 计算前j个数的和 进行了k次操作 则有 若不把第i个数放入前j个数中 dp[i][j][k] = dp[i-1][j][k] 若把第i个数 ...

  6. HDU 5617 Jam's maze dp+滚动数组

    题目链接: hdu: http://acm.hdu.edu.cn/showproblem.php?pid=5617 bc(中文): http://bestcoder.hdu.edu.cn/contes ...

  7. 【牛客 - 188D 】愤怒(01滚动数组优化dp,括号匹配方案个数,tricks)

    题干: 小w很生气 小w有一个长为n的括号序列 愤怒小w想把这个括号序列分为两个括号序列 小w想让分为的这两个括号序列同时合法 小w想知道一共有多少种划分方案 (划分的意思是划分为两个子序列) 注意两 ...

  8. 【NOIP2015提高组】子串 区间DP+滚动数组优化

    题意: 有两个仅包含小写英文字母的字符串 A 和 B. 现在要从字符串 A 中取出 k 个互不重叠的非空子串,然后把这 k 个子串按照其在字符串 A 中出现的顺序依次连接起来得到一个新的字符串. 请问 ...

  9. 【BZOJ1044】【tyvj3511】【codevs1870】木棍分割,二分答案+滚动数组+前缀和DP

    传送门1 传送门2 传送门3 写在前面:就我看来,这是一道不错的题 思路: 一.对于"求总长度最大的一段的长度最小值"这个问题,我们比较容易想到二分答案然后判断是否合法,显然这个是 ...

  10. 【滚动数组】【状压dp】Gym - 100956F - Colored Path

    f(i,j,S)表示到(i,j),且经由的路径上的颜色集合为S的价值的最小值,从上方和左方转移过来即可. 要注意,内存不足,需要滚动数组优化,即使用了map,还是需要. 路径输出的时候,可以再跑一遍d ...

最新文章

  1. php 立即释放session 去除其缓存,ThinkPHP关于session无法清除的一个小问题
  2. Oracle性能误区--MTS,RAC,分区,并行查询
  3. CanvasRenderingContext2D(渲染上下文对象)
  4. ROS 创建msg和srv 编写发布者和订阅者节点 编写服务端和客户端节点(python版本)
  5. 【软件质量】修正瑞士军刀枚举类
  6. [转]Java 通过JDBC连接Mysql数据库的方法和实例【图文说明】
  7. linux c++ utf8 gbk,Linux C++ gbk转为utf-8
  8. Vue2学习笔记:计算属性(computed)
  9. 你所不知道的JavaScript数组
  10. Object-C学习(一)——类别的创建、实现及调用
  11. c语言ABCDEF前中后序遍历,c语言实现二叉树及前中后序遍历
  12. 内网地址映射为外网地址方法
  13. 整理一下国内比较便宜的云主机
  14. 刘强东带到石头村什么宝贝?飞翔鸽、“村长刘”品牌、歌唱家!
  15. 美国计算机科学专业学校排名,美国计算机科学专业排名
  16. C++实现Point类
  17. Excel:通过简称查找全称,VLOOKUP函数
  18. Java多线程分批处理数据
  19. 智能识别收货地址(支持vue)/省市区街道四级联动
  20. 救急修复17款MacBook Pro键盘出现某些健按一下被识别成两下,然后打出2个字母的情况

热门文章

  1. 约翰 霍普克罗夫特计算机科学中心,北京大学
  2. LZJ的python的第8次打卡
  3. 中央C-高低音谱号里的中央C和其它音节
  4. HDFS中Locality 为什么介于0~1之间?与HBase之间有什么关系?
  5. 33 | 如何做好验收测试?
  6. 家政服务app软件开发
  7. omitting directory * 问题解决
  8. 2022-2027年中国机动车检测行业发展前景及投资战略咨询报告
  9. Defect Detection论文合集、代码和数据集
  10. jquery知识点总结(2)--- CSS模块+筛选模块+文档处理(CUD)模块+事件模块