当前位置: 首页 > news >正文

动态规划 之 枚举型

文章目录

  • 枚举类型
    • 青蛙吃虫
  • 选择与不选择问题

动态规划的题目,主要分为枚举类型和这个是否选择的两种题型

  • 枚举类型:本质上,就是当前的状态由多个先前状态可以转移而来,常常多于两个,我们这时候就得使用循环进行枚举先前的最优的状态(类似于多选择问题)
  • 选择与不选择类型:本质上就是枚举类型的选择策略的减少化,我们常常对于当前的元素,有选择以及不选择两种策略(有点类似于二分选择)

枚举类型

青蛙吃虫

在这里插入图片描述
在这里插入图片描述

思路分析:

  • 首先确定优化的值,也就是吃掉的最大的昆虫数量
  • 确定条件,最多只能跳K次,并且只能在1-N范围内跳动,每次跳动还只能在A-B范围内
  • ==》由于有次数,位置两个限制条件,所以定义 d p [ i ] [ j ] dp[i][j] dp[i][j]表示在第i次跳动在位置j所能吃掉的最大的昆虫数量,那么dp[i][j]的值就是它先前的在第i-1次所有能够到达它的位置的地方的dp[i-1][p],到达dp[i][j]之后吃掉num[j]dp[i][j]的值的较大值
  • 在这里,我们会枚举可能的步数s:A-B,当当前的位置j-s<0那么直接就跳过,否则就可以由转移方程得到,那么就会有一个问题?是否可达?所以dp数组的初始值设置为负无穷,同时设定dp[0][0]=0
import os
import sys

# 请在此输入您的代码

# 动态规划求解
T = int(input())
# 该怎么说?dp[i][j]定义为 在第i次跳跃的时候,处于位置j所能够吃的最多的昆虫数目
for _ in range(T):
  N,A,B,K = map(int,input().split())
  num = [0] +  list(map(int,input().split()))
  dp = [[-float('inf')]*(N+1) for _ in range(K+1)]
  dp[0][0] = 0
  ans = 0
  for i in range(1,K+1):
    for j in range(1,N+1):
      for p in range(A,B+1):
        if j - p < 0:
          break
        dp[i][j] = max(dp[i][j],dp[i-1][j-p]+num[j])
      ans = max(ans,dp[i][j])
  print(ans)

选择与不选择问题

相关文章:

  • 软考高级【网络规划设计师】 综合知识 - 计算机网络基础
  • Kubernetes故障排查实战指南
  • #7 Diffusion for beginners
  • 【MySQL】数据库-图书管理系统(CC++实现)
  • 翻译: 深入分析LLMs like ChatGPT 二
  • 【1162. 地图分析 中等】
  • 【MySQL】深度学习数据库开发技术:使用CC++语言访问数据库
  • UniApp+Vue3实现高性能无限滚动卡片组件:垂直滑动、触摸拖拽与动态导航的完美结合
  • es 生产集群的部署架构是什么?每个索引的数据量大概有多少?每个索引大概有多少个分片?
  • postman--接口测试工具安装和使用教程
  • IPoIB源码深度解析:如何基于TCP/IP协议栈实现高性能InfiniBand通信
  • sar:如何定时收集Linux监控信息
  • 数字电子电路基础第三章——门电路(三)
  • 如何通过DeepBI提升亚马逊广告效果:全方位优化广告投放的智能工具
  • 随身wifi wps是什么?(Wi-Fi Protected Setup)一种简化无线网络连接的技术,允许用户无需手动输入密码即可快速连接设备
  • Ubuntu 下 nginx-1.24.0 源码分析 - ngx_conf_t
  • 58区间和+44开发商购买土地(前缀和)
  • Linux的软件安装
  • 【navigator.geolocation的手机脚本定位】
  • Spring Cloud — 消息驱动 Stream
  • 滑县网站建设服务/企业网站优化服务公司
  • 中国建设网上银行登录/佛山优化网站关键词
  • 什么网站专门做外贸批发/搜索引擎优化关键字
  • 10个网站做站群/营销网站制作公司
  • 用cms创建自己带数据库的网站/百度快照替代
  • 郑州市建设委员会网站/长沙今日头条新闻