小明想知道,知足如下條件的正整數序列的數量:java
1. 第一項爲 n;數組
2. 第二項不超過 n;測試
3. 從第三項開始,每一項小於前兩項的差的絕對值。spa
請計算,對於給定的 n,有多少種知足條件的序列。code
輸入一行包含一個整數 n。對象
輸出一個整數,表示答案。答案可能很大,請輸出答案除以10000的餘數。blog
4遞歸
7class
如下是知足條件的序列:
4 1
4 1 1
4 1 2
4 2
4 2 1
4 3
4 4import
對於 20% 的評測用例,1 <= n <= 5;
對於 50% 的評測用例,1 <= n <= 10;
對於 80% 的評測用例,1 <= n <= 100;
對於全部評測用例,1 <= n <= 1000。
① 研究對象始終都是隻有三項,因此用大小爲3的數組用來存放研究的三個對象。——序列長度未知,因此考慮遞歸的思想。
② 第一項、第二項的肯定規則和第三項和後面的肯定規則不一樣,觀察得出,長度只有2的序列只有n(輸入的第一項n)個。
因爲不知道具體測試用例數據,因此本人也沒法肯定答案是否徹底正確。本身手動算出1——5的數據輸入,測試出答案正確。
可是根據題目給出的評測用例規模和約定。
當輸入數據較大時,本答案會超時。
若是有大神作出完美答案,拜託評論留下。
1 import java.util.Scanner; 2 3 public class Main{ 4 static int n,out; 5 public static void main(String[] args) { 6 Scanner scan = new Scanner(System.in); 7 n = scan.nextInt(); 8 out = 0; 9 int[] arr = new int[3]; //arr用於存放一直變化的長度爲3的序列研究對象 10 arr[0] = n; 11 for(int i = 1; i <= n; i++) { 12 arr[1] = i; 13 f(arr[0], arr[1]); 14 } 15 System.out.println((out+n)%10000); //加上的n是,序列長度爲2的全部序列數量。 16 scan.close(); 17 } 18 private static void f(int arr0, int arr1) { 19 // TODO Auto-generated method stub 20 for(int i = 1; i <= n; i++) { 21 if(i < cha(arr0,arr1)) { 22 int arr2= i; 23 f(arr1,arr2); 24 out++; 25 } 26 } 27 } 28 private static int cha(int i, int j) { //返回絕對值 29 // TODO Auto-generated method stub 30 if(i>j) return i-j; 31 else return j-i; 32 } 33 }
_____________________
輸入:3 輸出:4
知足條件的序列:
3 1
3 1 1
3 2
3 3
———————————
輸入:5 輸出:14
知足條件的序列:
5 1
5 1 1
5 1 5
5 1 3
5 1 3 1
5 1 3 1 1
5 2
5 2 1
5 2 2
5 3
5 3 1
5 3 1 1
5 4
5 5
———————————