Java實現 藍橋杯 算法提高 天天向上(DP)

試題 算法提高 天天向上

問題描述
  A同學的學習成績十分不穩定,於是老師對他說:“只要你連續4天成績有進步,那我就獎勵給你一朵小紅花。”可是這對於A同學太困難了。於是,老師對他放寬了要求:“只要你有4天成績是遞增的,我就獎勵你一朵小紅花。”即只要對於第i、j、k、l四天,滿足i<j<k<l並且對於成績wi<wj<wk<wl,那麼就可以得到一朵小紅花的獎勵。現讓你求出,A同學可以得到多少朵小紅花。
輸入格式
  第一行一個整數n,表示總共有n天。第二行n個數,表示每天的成績wi。
輸出格式
  一個數,表示總共可以得到多少朵小紅花。
樣例輸入
6
1 3 2 3 4 5
樣例輸出
6
數據規模和約定
  對於40%的數據,n<=50;
  對於100%的數據,n<=2000,0<=wi<=109。

PS:
dp[i][j]表示的是四個數中的第i個數,是第j個位置上,
所以我最後加的時候,就是dp[4]所有的加起來

 

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        int[] num = new int[n + 1];
        int[][] dp = new int[5][n + 1];
        for (int i = 1; i <= n; i++) {
            num[i] = sc.nextInt();
        }
        sc.close();
        for (int i = 1; i <= n; i++) {
            dp[1][i]=1;
            for (int j = i + 1; j <= n; j++) {
                if(num[j]>num[i]){
                    dp[2][j]+=dp[1][i];
                    dp[3][j]+=dp[2][i];
                    dp[4][j]+=dp[3][i];
                }
            }
        }
        long sum=0L;
        for(int i=4;i<=n;i++){
            sum+=dp[4][i];
        }
        System.out.println(sum);
    }
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章