简单的找规律,将序列的情况往后列出来
2 | 3 | 4 | 5 | |
---|---|---|---|---|
2 | 2 | |||
3 | 6 | 2 | ||
4 | 12 | 8 | 2 | |
5 | 20 | 20 | 10 | 2 |
横轴为序列长度i,竖轴为给定的k,由此可以看出
当序列长度i为2时,序列的个数为i*(i-1)
当i 为k时,序列个数恒为2
其他情况时,个数为杨辉三角的变换,即dp[i][j]=dp[i-1][j-1]+dp[i-1][j]
package lanqiao;
import java.util.*;
public class 算法训练_摆动序列{
static int [][]dp = new int [50][50];
public static void main(String []args) {
Scanner scan = new Scanner(System.in);
int k = scan.nextInt();
for(int i=2;i<=k;i++) {
for(int j =2;j<=i;j++) {
if(i==j) {
dp[i][j]=2;
}
else if(j == 2) {
dp[i][j]=i*(i-1);
}
else {
dp[i][j]=dp[i-1][j-1]+dp[i-1][j];
}
}
}
int ans =0;
for(int x=2;x<=k;x++) {
ans+=dp[k][x];
}
System.out.println(ans);
}
}