波动数列
来源:互联网 发布:搜狗 数据分析 面试 编辑:程序博客网 时间:2024/04/27 16:24
观察这个数列:
1 3 0 2 -1 1 -2 ...
这个数列中后一项总是比前一项增加2或者减少3。
栋栋对这种数列很好奇,他想知道长度为 n 和为 s 而且后一项总是比前一项增加a或者减少b的整数数列可能有多少种呢?
【数据格式】
输入的第一行包含四个整数 n s a b,含义如前面说述。
输出一行,包含一个整数,表示满足条件的方案数。由于这个数很大,请输出方案数除以100000007的余数。
例如,输入:
4 10 2 3
程序应该输出:
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;
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。
题意:输入四个数n,s,a,b;
n:表示输出结果为n个数
S:表示n个数的和要为s
a:表示每次增加a
b:表示每次减少b
首先我们要知道这个数列的范围,最小值和最大值,假如n个数一直递减,每次减b,就是n*b,而我们题目要求的总和为s,所以最小值从s-n*b开始就可以了,同理最大值为s+n*a
然后从写一个递归函数把最小值到最大值依次传入,在函数里面做加a减b的操作,最后的和为题目要求的就记录下来
import java.util.Scanner;public class Main {static int n, s, a, b;public static void main(String[] args) {Scanner cin = new Scanner(System.in);while (cin.hasNext()) {n = cin.nextInt();s = cin.nextInt();a = cin.nextInt();// 增加的数b = cin.nextInt();// 减少的数for (int i = s - n * b; i <= s + n * a; i++) {find(1, i + " ", i, i);}System.out.println(id%100000007);id=0;}cin.close();}static int id=0;public static void find(int d, String str, int ss, int sum) {//d用来记录个数,str保存结果,ss当前的数,sum所有数的总和if (d == n && sum == s) {// 个数达到时id++;System.out.println(str);} else if (d > n) {//个数超过时返回return;} else {int s1 = ss + a;//增加a后的数find(d + 1, str + s1 + " ", s1, sum + s1);int s2 = ss - b;//减少b后的数find(d + 1, str + s2 + " ", s2, sum + s2);}}}
1 0
- 波动数列
- 波动数列
- 波动数列
- 波动数列 - 蓝桥杯
- 蓝桥杯 波动数列 【未完成】
- 蓝桥杯:波动数列
- 历届试题 波动数列
- 波动数列 解题报告
- 历届试题 波动数列
- 动态规划-波动数列
- 蓝桥杯 波动数列
- 波动数列 蓝桥
- 历届试题 波动数列
- 历届试题 波动数列
- 蓝桥杯 历届试题 波动数列
- 蓝桥杯 波动数列 DP背包
- 波动数列背包版.java
- 学习笔记--深度遍历--波动数列
- mybatis实战教程(mybatis in action),mybatis入门到精通
- R-CNN阅读笔记
- 商品展示案例
- csu 1806(前向星+spfa+自适应辛普森)
- ReentrantLock在JDK中的使用,以及与传统方法的对比(ArrayBlockingQueue源码分析)
- 波动数列
- 知名浏览器病毒注入分析
- Manacher 最长回文子串
- atexit函数的调用与exit函数和_exit函数的区别
- 世界坐标系和相机坐标系,图像坐标系的关系
- 状态管理模式vuex
- JDK源码-HashMap死锁分析
- yolo1,yolo2论文理论总结
- 文件的输入和输出