解题思路:动态规划的简单应用

注意事项:最好得拿张纸写写,再用断点去一点点领悟其运行过程

参考代码:

/*
   关于动态规划的一道题目
   一个美食家在一条街上从前往后吃,每一次吃的都要比上次的更加好
   要尽量吃的次数多
   会输入总的小吃的数目以及小吃的美味程度

   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分

0 人评分

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

评论列表 共有 0 条评论

暂无评论