A - Frog 1(線性dp)

dosafdc發表於2020-10-21

題目
題意:有一排高等不一的柱子,一個青蛙從一頭跳到另一頭,一次最多跳一次或兩個柱子,記錄高度變化的最小總和;

簡單的線性DP:
狀態轉移方程:dp[i]=Math.min(dp[i-2]+Math.abs(a[i]-a[i-2]),dp[i-1]+Math.abs(a[i]-a[i-1]));
初始化:dp[1]=0;dp[2]=Math.abs(a[2]-a[1]);

AC程式碼:

import java.util.*;
public class Main {
 static Scanner sc=new Scanner(System.in);
 public static void main(String[] args) {
  int n=1;
  for(int i=0;i<n;i++) {
   show();
  }
 }
 private static void show() {
  int n=sc.nextInt();
  int dp[]=new int [n+1];
  int a[]=new int [n+1];
  for(int i=1;i<=n;i++) {
   a[i]=sc.nextInt();
  }
  dp[1]=0;
  dp[2]=Math.abs(a[2]-a[1]);
  for(int i=3;i<=n;i++) {
   dp[i]=Math.min(dp[i-2]+Math.abs(a[i]-a[i-2]),dp[i-1]+Math.abs(a[i]-a[i-1]));
  }
  System.out.println(dp[n]);
 }
}

感覺DP要多堆題

相關文章