第一题 动态规划模拟递归
第一题的坑就是动态规划实现递归,类似于爬台阶,给定a1=a0=1,ai = A*ai-1+B*ai-2,最后要求输出每次查询得到的结果经过取模M后的结果。难点在于直接相乘会溢出,可以把取余放到每一个ai的求解过程中。
import java.util.Scanner;
import java.util.*;
public class Main {
Scanner sc = new Scanner(System.in);
int A = sc.nextInt();
int B = sc.nextInt();
int M = sc.nextInt();
int num = sc.nextInt();
int max = 0;
int[] nums = new int[num];
for(int i = 0; i<num; i++){
int id = sc.nextInt();
nums[i] = id;
max = Math.max(max, id);
}
int[] dp = new int[max+1];
dp[0] = 1;
dp[1] = 1;
for(int i = 2; i<=max; i++){
dp[i] = (dp[i-1] * A)%M + (dp[i-2] * B)%M;
}
for(int i=0; i<num; i++){
System.out.println(dp[nums[i