目录

1 问题描述

2 解决方案

 


1 问题描述

问题描述
  观察这个数列:
  1 3 0 2 -1 1 -2 ...

  这个数列中后一项总是比前一项增加2或者减少3。

  栋栋对这种数列很好奇,他想知道长度为 n 和为 s 而且后一项总是比前一项增加a或者减少b的整数数列可能有多少种呢?

输入格式
  输入的第一行包含四个整数 n s a b,含义如前面说述。
输出格式
  输出一行,包含一个整数,表示满足条件的方案数。由于这个数很大,请输出方案数除以100000007的余数。
样例输入
4 10 2 3
样例输出
2
样例说明
  这两个数列分别是2 4 1 3和7 4 1 -2。
数据规模和约定
  对于10%的数据,1<=n<=5,0<=s<=5,1<=a,b<=5;
  对于30%的数据,1<=n<=30,0<=s<=30,1<=a,b<=30;
  对于50%的数据,1<=n<=50,0<=s<=50,1<=a,b<=50;
  对于70%的数据,1<=n<=100,0<=s<=500,1<=a, b<=50;
  对于100%的数据,1<=n<=1000,-1,000,000,000<=s<=1,000,000,000,1<=a, b<=1,000,000。

2 解决方案

下面代码参考自文末参考资料1,具体讲解请见参考资料1~

具体代码如下:

import java.util.Scanner;public class Main {public static long n, s, a, b;public static long result = 0L;public static int e = 0;public static long[][] dp;;public void getDP() {dp = new long[2][1000005];dp[e][0] = 1;for(int i = 1;i < n;i++) {e = 1 -e;for(int j = 0;j <= i * (i + 1) / 2;j++) {if(i > j)dp[e][j] = dp[1 - e][j];elsedp[e][j] = (dp[1 - e][j] + dp[1 - e][j - i]) % 100000007;}}}public static void main(String[] args) {Main test = new Main();Scanner in = new Scanner(System.in);n = in.nextLong();s = in.nextLong();a = in.nextLong();b = in.nextLong();test.getDP();for(long i = 0;i <= n * (n - 1) / 2;i++) {long t = s - i * a + (n*(n-1)/2-i) * b;if(t % n == 0)result = (result + dp[e][(int) i]) % 100000007;}System.out.println(result);}
}

参考资料:

1.蓝桥杯 历届试题 波动数列 DP 01背包 滚动数组

算法笔记_172:历届试题 波动数列(Java)相关推荐

  1. 算法笔记_183:历届试题 九宫重排(Java)

    目录 1 问题描述 2 解决方案   1 问题描述 问题描述 如下面第一个图的九宫格中,放着 1~8 的数字卡片,还有一个格子空着.与空格子相邻的格子中的卡片可以移动到空格中.经过若干次移动,可以形成 ...

  2. 算法笔记_188:历届试题 危险系数(Java)

    目录 1 问题描述 2 解决方案   1 问题描述 问题描述 抗日战争时期,冀中平原的地道战曾发挥重要作用. 地道的多个站点间有通道连接,形成了庞大的网络.但也有隐患,当敌人发现了某个站点后,其它站点 ...

  3. Java实现 蓝桥杯 历届试题 波动数列

    问题描述 观察这个数列: 1 3 0 2 -1 1 -2 - 这个数列中后一项总是比前一项增加2或者减少3. 栋栋对这种数列很好奇,他想知道长度为 n 和为 s 而且后一项总是比前一项增加a或者减少b ...

  4. 蓝桥杯 历届试题 拉马车 java

    Prev43 历届试题 拉马车 题目如下: 问题描述:小的时候,你玩过纸牌游戏吗?有一种叫做"拉马车"的游戏,规则很简单,却很吸引小朋友.其规则简述如下:假设参加游戏的小朋友是A和 ...

  5. 算法笔记_029:约瑟夫斯问题(Java)

    目录 1 问题描述 2 解决方案   1 问题描述 引用自<算法设计与分析基础>第三版: 约瑟夫斯问题,是以弗拉瓦斯.约瑟夫斯(Flavius Josephus)的名字命名的.约瑟夫斯是一 ...

  6. 算法笔记_226:填符号凑算式(Java)

    目录 1 问题描述 2 解决方案   1 问题描述 匪警请拨110,即使手机欠费也可拨通! 为了保障社会秩序,保护人民群众生命财产安全,警察叔叔需要与罪犯斗智斗勇,因而需要经常性地进行体力训练和智力训 ...

  7. 算法笔记_231:网格中移动字母(Java)

    目录 1 问题描述 2 解决方案   1 问题描述 2x3=6个方格中放入ABCDE五个字母,右下角的那个格空着.如图[1.jpg]所示. 和空格子相邻的格子中的字母可以移动到空格中,比如,图中的C和 ...

  8. 算法笔记_048:找零问题(Java)

    目录 1 问题描述 2 解决方案 2.1 动态规划法   1 问题描述 现需找零金额为n,则最少需要用多少面值为d1 < d2 < d3 < ... < dm的硬币?(PS:假 ...

  9. java 进制转换算法_算法笔记_033:十六进制转八进制(Java)

    packagecom.liuzhen.systemExe;importjava.util.Scanner;public classMain {//把16进制字符串转成2进制字符串 publicStri ...

最新文章

  1. Pandas_transform的用法
  2. 新手探索NLP(二)
  3. SAAS,象B2C那样的B2B分销系统
  4. 新人入职培训有关职场沟通的总结分享
  5. sql性能优化之多表联查
  6. Spring boot自定义启动字符画(banner)
  7. linux查看/etc/fastab,/etc/fastab文件丢失致系统宕机的解决方案
  8. 【iOS】TouchDown、TouchDownRepeat 和 TouchCancel 的区别
  9. CVPR2019,开源活体检测
  10. Linux查看占用mem的进程脚本
  11. RuntimeError: output with shape [4, 1, 512, 512] doesn‘t match the broadcast shape[4, 4, 512, 512]
  12. 深度步态识别综述(二)
  13. LayoutInflater的使用
  14. java微信公众平台开发教程分享
  15. 吴军 阅读与写作50讲 02 如何读懂作者的内心 读后感
  16. java内存溢出监控_Java内存溢出和死锁的监控与分析
  17. 二叉树的前序,中序,后续(非递归版本)
  18. 设计模式03 - 装饰者模式
  19. 课后作业-团队编程项目总结
  20. 疯狂Java讲义(六)----第四部分

热门文章

  1. 剑指offer面试题[64]-数据流中的中位数
  2. 接口测试用例怎么写?
  3. 21天Jmeter打卡Day8 get/delete/put之间的请求
  4. 你知道IT行业里哪种岗位女生最多吗?
  5. 使用这个插件,fiddler抓包直接生成httprunner脚本
  6. oracle11存储过程,oracle 存储过程执行报错ORA-12828
  7. python名词解释数据仓库_python实现数据仓库ETL
  8. 3D数学之柏林噪声(Perlin Noise)
  9. java 封装dll_java调用C#封装的DLL文件
  10. CS224n自然语言处理(二)——语言模型、机器翻译和CNN