蓝桥杯第五届javaA组 波动数列

一、题目
蓝桥杯第五届javaA组 波动数列
二、分析
最开始没有思路,参考了一下下网上的方法,用动态规划+滚动数组来做,类似于01背包问题
(参考网址:https://blog.****.net/wr132/article/details/43861145)

三、代码
不知道为什么,只能得到70分,后面的3组测试数据都超时了。。。。

import java.util.Scanner;
public class Main {
	static int n,s,a,b;
	static int[][] ans;
	static int mod = 100000007;
	static int count;
	public static void main(String[] args) {
		Scanner in = new Scanner(System.in);
		n=in.nextInt();
		s=in.nextInt();
		a=in.nextInt();
		b=in.nextInt();
		int num=(n*(n-1))/2;  //a,b总数
		ans = dp(num);
		for(int j=0;j<=num;j++)  //共有j个a
		{
			if((s-a*j+b*(num-j))%n==0)
			{
				if((n-1)%2==0)
					count=(count+ans[0][j])%mod;
				else
					count=(count+ans[1][j])%mod;
			}
		}
		System.out.print(count);		
	}
	private static int[][] dp(int numa)
	{
		int[][] f = new int[2][numa+1];
		f[0][0]=1;
		for(int i=1;i<=n-1;i++)
		{
			for(int j=0;j<=(i*(i+1))/2;j++)
			{
				if(i>j)
					f[i%2][j]=f[(i-1)%2][j];
				else
				{
					f[i%2][j]=(f[(i-1)%2][j]+f[(i-1)%2][j-i])%mod;
				}
			}
		}
		return f;
	}	
}