大家好,我是晴天学长,今天讲解的是DP入门题,对DP的理解会更深刻,加油!需要的小伙伴请自取哦!💪💪💪
1 )蓝桥勇士
2) .算法思路
蓝桥勇士
1.构建一个最长上升子序列
dp[i]表示到[0,i]之间以i为底的的最长子序列长度
画图
2.接收数据,数组开大一点,建表
3.转移方程
挑战
不挑战
看是否大于,大于的话就能接在N[j]的后面,自己的dp[i] = dp[j]+1;
4.输出对手数
3).代码示例
package LanQiaoTest.动态规划;
import java.util.Arrays;
import java.util.Scanner;
public class 蓝桥勇士 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int n = scanner.nextInt();
int[] N = new int[n + 10];
int[] dp = new int[n + 10];
for (int i = 1; i <= n; i++) {
N[i] = scanner.nextInt();
}
int ans = 0;
Arrays.fill(dp, 1);
for (int i = 1; i <= n; i++) {
for (int j = 1; j < i; j++) {
//不挑战
//挑战
if (N[i] > N[j]) {
dp[i] = Math.max(dp[i], dp[j] + 1);
}
ans = Math.max(ans, dp[i]);
}
}
System.out.println(ans);
}
}
4).总结
- 一定要深刻的理解动态规划的动态转移方程。