问题描述

观察这个数列:

  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。

  1. import java.util.Scanner;
  2. public class Main {
  3. public static long n, s, a, b;
  4. public static long result = 0L;
  5. public static int e = 0;
  6. public static long[][] dp;;
  7. public void getDP() {
  8. //DP[1-e][j]这里的意思是,我的+j个a,
  9. //一直1-e就是是上一个
  10. dp = new long[2][1000005];
  11. dp[e][0] = 1;
  12. for(int i = 1;i < n;i++) {
  13. e = 1 -e;
  14. for(int j = 0;j <= i * (i + 1) / 2;j++) {
  15. if(i > j)
  16. dp[e][j] = dp[1 - e][j];
  17. else
  18. //这个意思是,我可以是上次的+j个a,也可以是在-i个b,这里就变成了+j-i个a
  19. //因为我只有两种选择,一个是+a一个是-b,我是j-i个+a,剩下的就是i个-b
  20. dp[e][j] = (dp[1 - e][j] + dp[1 - e][j - i]) % 100000007;
  21. }
  22. }
  23. }
  24. public static void main(String[] args) {
  25. Main test = new Main();
  26. Scanner in = new Scanner(System.in);
  27. n = in.nextLong();
  28. s = in.nextLong();
  29. a = in.nextLong();
  30. b = in.nextLong();
  31. test.getDP();
  32. for(long i = 0;i <= n * (n - 1) / 2;i++) {
  33. long t = s - i * a + (n*(n-1)/2-i) * b;//t就是除去添加a和删去b剩下的数的和,必须被n整除才可以
  34. //这里你要是问为什么上句话是必须被n整除,你可以出门右转了
  35. //因为我只有两种操作,我把两种操作的数字都删了,就是剩下的数字的和了,我剩下数字的和是我n个数平分的
  36. if(t % n == 0)//哪种方式合适就用哪种
  37. result = (result + dp[e][(int) i]) % 100000007;
  38. }
  39. System.out.println(result);
  40. }
  41. }

Java实现 蓝桥杯 历届试题 波动数列的更多相关文章

  1. 转 蓝桥杯 历届试题 波动数列 [ dp ]

    传送门   历届试题 波动数列   时间限制:1.0s   内存限制:256.0MB     锦囊1   锦囊2   锦囊3   问题描述 观察这个数列: 1 3 0 2 -1 1 -2 ... 这个 ...

  2. 蓝桥 PREV-30 历届试题 波动数列 【动态规划】

      历届试题 波动数列   时间限制:1.0s   内存限制:256.0MB      问题描述 观察这个数列: 1 3 0 2 -1 1 -2 ... 这个数列中后一项总是比前一项增加2或者减少3. ...

  3. Java实现 蓝桥杯 历届试题 斐波那契

    试题 历届试题 斐波那契 资源限制 时间限制:1.0s 内存限制:256.0MB 问题描述 斐波那契数列大家都非常熟悉.它的定义是: f(x) = 1 - (x=1,2) f(x) = f(x-1) ...

  4. Java实现蓝桥杯 历届试题 k倍区间

    历届试题 k倍区间 时间限制:2.0s 内存限制:256.0MB 问题描述 给定一个长度为N的数列,A1, A2, - AN,如果其中一段连续的子序列Ai, Ai+1, - Aj(i <= j) ...

  5. Java实现蓝桥杯历届试题分考场

    历届试题 分考场 时间限制:1.0s 内存限制:256.0MB 提交此题 问题描述 n个人参加某项特殊考试. 为了公平,要求任何两个认识的人不能分在同一个考场. 求是少需要分几个考场才能满足条件. 输 ...

  6. Java实现蓝桥杯历届试题兰顿蚂蚁

    历届试题 兰顿蚂蚁 时间限制:1.0s 内存限制:256.0MB 提交此题 问题描述 兰顿蚂蚁,是于1986年,由克里斯·兰顿提出来的,属于细胞自动机的一种. 平面上的正方形格子被填上黑色或白色.在其 ...

  7. Java实现蓝桥杯历届试题回文数字

    历届试题 回文数字 时间限制:1.0s 内存限制:256.0MB 提交此题 问题描述 观察数字:12321,123321 都有一个共同的特征,无论从左到右读还是从右向左读,都是相同的.这样的数字叫做: ...

  8. Java实现蓝桥杯历届试题高僧斗法

    历届试题 高僧斗法 时间限制:1.0s 内存限制:256.0MB 提交此题 锦囊1 锦囊2 问题描述 古时丧葬活动中经常请高僧做法事.仪式结束后,有时会有"高僧斗法"的趣味节目,以 ...

  9. Java实现蓝桥杯历届试题买不到的数目

    历届试题 买不到的数目 时间限制:1.0s 内存限制:256.0MB 提交此题 锦囊1 锦囊2 问题描述 小明开了一家糖果店.他别出心裁:把水果糖包成4颗一包和7颗一包的两种.糖果不能拆包卖. 小朋友 ...

随机推荐

  1. android 动态设置TextView值,例:金额增加

    一说到动态递增设置TextView值,很多人应该马上就想到起个线程,让后在线程中睡眠指定时间,使用handler发送消息更新TextView值! 这样是实现了动态递增设置TextView值但是效率不咋 ...

  2. k8s安装部署成功

  3. Unity2.5D Sprite层级显示遮挡问题处理

    代码源自游戏<A Place for the Unwilling> 开发<A Place for the Unwilling>游戏第一部要解决的问题就是让精灵可以围绕其它精灵前 ...

  4. dockerfile定制docker的脚本文件

    Dockerfile文件详解 #指定操作系统 FROM scratch #制作base image 基础镜像,尽量使用官方的image作为base image FROM centos #使用base ...

  5. python3.x 基础一:dict字典

    字典,{key,value} help(dict) 定义一个字典: >>> dict1 {', 'name': 'yzw'} >>> dict2=dict1 > ...

  6. PAT 乙级-1025 链表反转

    给定一个常数K以及一个单链表L,请编写程序将L中每K个结点反转.例如:给定L为1→2→3→4→5→6,K为3,则输出应该为3→2→1→6→5→4:如果K为4,则输出应该为4→3→2→1→5→6,即最后 ...

  7. VMware Workstation如何修改弹出释放快捷键

    VMware Workstation默认使用Ctrl+Alt键就可以将鼠标从虚拟机脱离出来. 但有时这2个键可能会和其他软件的快捷键冲突,这时候如何设置快捷键呢: 打开WMware Workstati ...

  8. Django + Celery 实现动态配置定时任务

    哈喽,今天给大家分享一篇Django+Celery实现动态配置定时任务,因为最近也是无意间看到一位大佬关于这块的文章,然后自己觉得不错,也想学习写一下,然后最终实现功能是在前端页面统一管理计划任务,大 ...

  9. MongoDB全球云端技术盛会MongoDB.live

    MongoDB全球云端技术盛会MongoDB.live,将于北京时间6月9日22:00正式开启,大会将以在线直播+按需学习相结合的方式,面向全球开发者.架构师等MongoDB 用户和爱好者免费开放,精 ...

  10. String类练习

    1.模拟一个trim方法,去除字符串两端的空格 2.将一个字符串进行反转.将字符串中指定部分进行反转 3.获取一个字符串在另一个字符串中出现的次数 4.获取两个字符串中最大相同子串 5.对字符串中字符 ...