試題 算法提高 天天向上
問題描述
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);
}
}