动态规划入门第2课,经典DP问题1 --- 线性

news2024/12/25 22:10:39

动态规划要点

阶段的2个方向:从上到下;从下到上。

image.png

 

动态规划要点

从递归到DP

动态规划要点

两个2个方向

优化的可能性

第1题     合唱队形

N位同学站成一排,音乐老师要请其中的(N-K)位同学出列,使得剩下的K位同学排成合唱队形。

合唱队形是指这样的一种队形:设K位同学从左到右依次编号为1,2…,K,他们的身高分别为T1,T2,…,TK, 则他们的身高满足T1  < …Ti+1 > … > TK(1 <= i <= K)。

你的任务是,已知所有N位同学的身高,计算最少需要几位同学出列,可以使得剩下的同学排成合唱队形。

输入格式

第一行是一个整数N(2 <= N <= 100),表示同学的总数。

第二行有n个整数,用空格分隔,第i个整数Ti(130 <= Ti <= 230)是第i位同学的身高(厘米)。

输出格式

包括一行,这一行只包含一个整数,就是最少需要几位同学出列。

输入/输出例子1

输入:

8

186 186 150 200 160 130 197 220

输出:

4

样例解释

#include <cstdio>
#include <cstdlib>
#include <cstring>
#define MAX 102
int high[MAX];
int left[MAX];
int right[MAX];
int main(int argc, char const *argv[])
{
    int n;
    while(scanf("%d",&n) != EOF) {
        for(int i = 0; i < n; i++) {
            scanf("%d",&high[i]);
            left[i] = 0;
            right[i] = 0;
        }
        for(int i = 0; i < n; i++) {
            int max = -1;
            bool isMin = true;
            for(int j = i -1; j >= 0; j--) {
                if(high[j] < high[i] && max < left[j]) {
                    max = left[j];
                    isMin = false;
                }
            }
            if(!isMin) {
                left[i] = max + 1;
            }

        }

        for(int i = n-1; i >= 0; i--) {
            int max = -1;
            bool isMin = true;
            for(int j = i + 1; j < n; j++) {
                if(high[j] < high[i] && max < right[j]) {
                    max = right[j];
                    isMin = false;
                }
            }
            if(!isMin) {
                right[i] = max + 1;
            }
        }

        int ans = n;
        for(int i = 0; i < n; i++) {
            int temp = n - (left[i] + right[i] + 1);
            if(ans > temp) {
                ans = temp;
            }
        }
        printf("%d\n", ans);
    }
    return 0;
}

动态规划要点

枚举中间的方法

换一种思路:预处理

数学一例:钱币问题

A:用6个钱币,面额分别是1,2,5,10,2,5。能构成哪些付款额?

60个钱币的情况呢?  

(从递归到DP----子问题与去重复运算)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/783192.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Apple M1 Pro macOS 切换中文输入法卡住

(macOS 在切换中文输入法时出现卡住的情况 1&#xff0c;切换为中文输入法后再次卡住2&#xff0c;杀死 简体中文输入方式的进程参考 将光标移到菜单栏的输入法切换为英文输入法 多次切换为英文输入法&#xff0c;可以切换为英文输入法 切换为英文输入法后电脑不卡顿了&#xf…

基于springboot+jpa+mysql+html网上商城系统

基于springbootjpamysqlhtml网上商城系统 一、系统介绍二、功能展示1.主页(客户)2.登陆&#xff08;客户&#xff09;3.注册&#xff08;客户&#xff09;4.购物车(客户)5.我的订单&#xff08;客户&#xff09;6.用户管理&#xff08;管理员&#xff09;7.分类管理&#xff08…

iOS--编译链接的过_1

iOS 开发中使用的是编译语言&#xff0c;所谓编译语言是在执行的时候&#xff0c;必须先通过编译器生成机器码&#xff0c;机器码可以直接在CPU上执行&#xff0c;所以执行效率较高&#xff0c;是使用 Clang / LLVM 来编译的。LLVM是一个模块化和可重用的编译器和工具链技术的集…

Java基本数据类型默认初始化值测试

1.基本数据类型为成员变量 public class Test {boolean b;char c;byte bt;short s;int i;long l;float f;double d;public static void main(String[] args) {Test t new Test();System.out.println("boolean类型默认值&#xff1a;" t.b);System.out.println(t.c…

Android 中 cgroup抽象层详解

源码基于&#xff1a;Android R 0. 前言 在之前的博文《Android中app freezer原理》一文中&#xff0c;我们看到冻结器的enable、freeze、unfreeze 都是通过 cgroup 的机制进行处理。 本文将介绍下 Android 中 cgroup 的抽象层基本信息和使用方式。 1. cgroups 简介 cgroups…

Linux常用命令——dump命令

在线Linux命令查询工具 dump 用于备份ext2或者ext3文件系统 补充说明 dump命令用于备份ext2或者ext3文件系统。可将目录或整个文件系统备份至指定的设备&#xff0c;或备份成一个大文件。 语法 dump(选项)(参数)选项 -0123456789&#xff1a;备份的层级&#xff1b; -b&…

layui框架学习(32:表单)

Layui中的分页模块laypage支持在指定的容器中显示分页信息&#xff0c;主要是指总页数、当前页面、上一页/下一页等信息&#xff0c;可以配合其它组件实现分页显示数据或者分页显示内容&#xff0c;事实上&#xff0c;Layui中的动态数据表格等模块都附带有显示分页功能。laypag…

hive之文件格式与压缩

hive文件格式&#xff1a; 概述&#xff1a; 为Hive表中的数据选择一个合适的文件格式&#xff0c;对提高查询性能的提高是十分有益的。Hive表数据的存储格式&#xff0c;可以选择text file、orc、parquet、sequence file等。 文本文件&#xff1a; 文本文件就是txt文件&…

【算法 -- LeetCode】(025) K 个一组翻转链表

1、题目 给你链表的头节点 head &#xff0c;每 k 个节点一组进行翻转&#xff0c;请你返回修改后的链表。 k 是一个正整数&#xff0c;它的值小于或等于链表的长度。如果节点总数不是 k 的整数倍&#xff0c;那么请将最后剩余的节点保持原有顺序。 你不能只是单纯的改变节点…

企业服务器数据库中了360后缀勒索病毒怎么解决加密的方式有哪些

随着网络安全问题日益突出&#xff0c;企业服务器数据库成为黑客攻击的重要目标之一。近日&#xff0c;我们收到很多企业的求助&#xff0c;企业的服务器数据库遭到了360后缀的勒索病毒攻击&#xff0c;导致企业内部的许多重要数据被加密无法读取使用&#xff0c;严重影响了企业…

05网络模型练习题

新版MATLAB中&#xff0c;图论工具箱的函数进行了更换 MATLAB中文参考文档&#xff1a;https://ww2.mathworks.cn/help/matlab/index.html 遍历、最短路径和循环 bfsearch 广度优先图搜索 dfsearch 深度优先图搜索 shortestpath 两个单一节点之间的最短路径 shortestpathtree …

Flask 笔记

Flask 笔记 一、Flask介绍 1、学习Flask框架的原因 2020 Python 开发者调查结果显示Flask和Django是Python Web开发使用的最主要的两个框架。 2、Flask介绍 ​ Flask诞生于2010年&#xff0c;是Armin ronacher用Python 语言基于Werkzeug工具箱编写的轻量级Web开发框架。 ​…

企业数字化转型要转什么?怎么转?_光点科技

随着科技的飞速发展和互联网的普及&#xff0c;数字化转型已成为现代企业持续发展和提高竞争力的必经之路。数字化转型是指企业在信息技术的驱动下&#xff0c;将传统的业务模式、流程和文化进行全面优化和改造&#xff0c;以适应数字化时代的新要求。 一、企业数字化转型的重要…

二极管常见参数

写在前面&#xff1a; 本文章旨在总结备份、方便以后查询&#xff0c;由于是个人总结&#xff0c;如有不对&#xff0c;欢迎指正&#xff1b;另外&#xff0c;内容大部分来自网络、书籍、和各类手册&#xff0c;如若侵权请告知&#xff0c;马上删帖致歉。 目录 肖特基二极管PN…

CCLINK IE转MODBUS-TCP网关cclink与以太网的区别

你是否曾经遇到过需要同时处理CCLINK IE FIELD BASIC和MODBUS两种数据协议的情况&#xff1f;远创智控的YC-CCLKIE-TCP网关可以帮助你解决这个问题。 远创智控YC-CCLKIE-TCP网关可以分别从CCLINK IE FIELD BASIC一侧和MODBUS一侧读写数据&#xff0c;然后将数据存入各自的缓冲区…

SpringBoot整合可视化监控工具——SpringBoot Admin

目录 父项目 子模块——server 子模块——client 开放监控指标 性能 环境 日志配置 映射 问题一: 明明项目启动却还是Instance 是 office 问题二: 记springboot中yml文件最后一位是星号*的写法 在说软件监控之前&#xff0c;我们先来了解一下软件的发展史&#xff0c…

【字符流】案例:文件到集合

案例&#xff1a;文件到集合 1.需求&#xff1a; 把文本文件中的数据读取到集合&#xff0c;并遍历集合。要求&#xff1a;文件中的每一行数据是一个集合元素 2.思路 创建字符缓冲输入流对象创建ArrayList集合对象调用字符缓冲输入流对象的方法读数据把读取到的字符串数据存…

【Lingo软件求解案例一:MCM1988:B题两辆平板车的装货问题】

题目描述 有 七种规格的包装箱 要装到 两辆平板车 上 包装箱的宽和高是一样的 但是厚度&#xff08;t 厘米&#xff09;和重量&#xff08;w 公斤&#xff09;是不一样的 表格中给出每种包装箱的厚度、重量和数量 每辆平板车有10.2米长的地方可以用来装包装箱 像面包片一样 载…

【PostgreSQL内核学习(七)—— 查询规划(生成路径)】

查询规划——预处理 生成路径 声明&#xff1a;本文的部分内容参考了他人的文章。在编写过程中&#xff0c;我们尊重他人的知识产权和学术成果&#xff0c;力求遵循合理使用原则&#xff0c;并在适用的情况下注明引用来源。 本文主要参考了《PostgresSQL数据库内核分析》一书 生…