HDU-1005-(Number Sequence)

作者: itbird01 | 来源:发表于2021-11-13 00:39 被阅读0次

    HDU-1005-(Number Sequence)

    解题思路

    1.DP基础题目,根据动态转移方程,推导结果

    f(1) = 1, f(2) = 1, f(n) = (A * f(n - 1) + B * f(n - 2)) mod 7.

    解题遇到的问题

    1.逐步去求n,会存在超时问题,因为n如果是一亿次,就得求一亿次,通过分析题意可知,fn的值实际存在循环, (A * f(n - 1) + B * f(n - 2)) mod 7.,所以总共是7*7=49

    后续需要总结学习的知识点

    ##解法1
    import java.util.Scanner;
    
    public class Main {
    
        public static void main(String[] args) {
            Scanner mScanner = new Scanner(System.in);
            // (1 <= A, B <= 1000, 1 <= n <= 100,000,000)
            // f(1) = 1, f(2) = 1, f(n) = (A * f(n - 1) + B * f(n - 2)) mod 7.
            while (true) {
                int a = mScanner.nextInt();
                int b = mScanner.nextInt();
                long n = mScanner.nextLong();
                if (a == 0 && b == 0 && n == 0) {
                    break;
                }
    
                long ans = 1;
                if (n != 1 && n != 2) {
                    long f1 = 1;
                    long f2 = 1;
                    for (int i = 3; i <= n % 49; i++) {
                        ans = (a * f1 + b * f2) % 7;
                        f2 = f1;
                        f1 = ans;
                    }
                }
                System.out.println(ans);
            }
            mScanner.close();
        }
    }
    

    相关文章

      网友评论

        本文标题:HDU-1005-(Number Sequence)

        本文链接:https://www.haomeiwen.com/subject/wzinzltx.html