解题思路:动态规划的简单应用
注意事项:最好得拿张纸写写,再用断点去一点点领悟其运行过程
参考代码:
/*
关于动态规划的一道题目
一个美食家在一条街上从前往后吃,每一次吃的都要比上次的更加好
要尽量吃的次数多
会输入总的小吃的数目以及小吃的美味程度
Time:2023/2/10
Author:Cherish
c1557
*/
import java.util.Arrays;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
int SnackSum;
int maxDelicious = 0; //最大美味次数
int i,j;
Scanner ss = new Scanner(System.in);
SnackSum = ss.nextInt();
int[] SnackDelicacy = new int[SnackSum];
int[] dp = new int[SnackSum];
for (i = 0; i < SnackSum; i++){
SnackDelicacy[i] = ss.nextInt();
}
/*
思路是动态规划,建议拿张纸画图
最好再用断点试着判断一下才行
不然比较难理解
*/
Arrays.fill(dp,1);
//---以下是重点---
for (i = 1; i <= SnackSum-1; i++){
for (j = i - 1; j >= 0; j--){
if (SnackDelicacy[i] >= SnackDelicacy[j]){
dp[i] = Math.max(dp[i], dp[j]+1);
}
}
if (dp[i] > maxDelicious){
maxDelicious = dp[i];
}
}
//---到此为止---
System.out.println(maxDelicious);
// 测试输入情况
// System.out.println(SnackSum);
// System.out.println(Arrays.toString(SnackDelicacy));
}
}
0.0分
0 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复