加载中...

波动数列

AcWing 1214. 波动数列 - AcWing 来自 acwing 大佬的笔记

备赛蓝桥杯 - 蓝桥云课 (lanqiao.cn)

image-20230326161637996

image-20230326163734310

image-20230326164944205

import java.util.Scanner;

public class N215 {

	static int N = 1010, mod = 100000007;
	static int n, s, a, b;
	static int[][] f = new int[N][N]; // 选前i个数中 余数为j的方案数

	static int get_mod(int a, int b) // 求a除以b的正余数 --> core
	{
		return (a % b + b) % b; // 这里的 (a % b + b) 是为了不出现负数,因为负数对正数取余会有负数
	}

	public static void main(String[] args) {
		Scanner scanner = new Scanner(System.in);
		n = scanner.nextInt();
		s = scanner.nextInt();
		a = scanner.nextInt();
		b = scanner.nextInt();
		f[0][0] = 1;// 含义:只有一项 x 余数为 0 的方案数为 1
		for (int i = 1; i <= n - 1; i++) {
			for (int j = 0; j <= n - 1; j++) {
				f[i][j] = (f[i - 1][get_mod(j - (n - i) * a, n)] + f[i - 1][get_mod(j + (n - i) * b, n)]) % mod;
			}
		}
		System.out.println(f[n - 1][get_mod(s, n)]);
	}
}

AcWing 来自 acwing 大佬的笔记,闫氏dp分析法具体步骤

image-20230326162030977

posted @ 2023-03-26 16:52  ChuenSan  阅读(29)  评论(0编辑  收藏  举报