小明想知道,满足以下条件的正整数序列的数量:
1. 第一项为 n;
2. 第二项不超过 n;
3. 从第三项开始,每一项小于前两项的差的绝对值。
请计算,对于给定的 n,有多少种满足条件的序列。

dfs+记忆化

import java.util.*;
import java.math.*;
public class Main 
{
    static Scanner input = new Scanner(System.in);
    public static int n = input.nextInt();
    public static long ans=0;
    public static int p=1;
    public static int a[] = new int[100];
    public static long b[][] = new long[1000][1000];
    public static void main(String[] args) 
    {
        a[0] = n;
        for(int i=1;i<=n;i++)
        {
            a[p] = i;
            ans++;
            dfs(Math.abs(a[0]-a[1]));
        }
        System.out.println(ans%10000);
    }
    public static void dfs(int x)
    {
        for(int i=1;i<x;i++)
        {
            p++;
            a[p] = i;
            ans++;
            long aa=ans;
            if(b[a[p-1]][a[p]]!=0)
            	ans+=b[a[p-1]][a[p]];
            else
            	{
            	dfs(Math.abs(a[p]-a[p-1]));
            	b[a[p-1]][a[p]] = (ans-aa)%10000;
            	}
            a[p] = 0;
            p--;
        }
    }
}