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

网站济南网站建设seo专员

网站济南网站建设,seo专员,推荐 网站空间,在线直播教学网站是怎么做的动态规划(Dynamic Programming,简称 DP)是一种用于解决多阶段决策最优化问题的算法策略。它通过把原问题分解为相对简单的子问题,记录子问题的解(通常使用表格等数据结构存储),避免重复计算&…

动态规划(Dynamic Programming,简称 DP)是一种用于解决多阶段决策最优化问题的算法策略。它通过把原问题分解为相对简单的子问题,记录子问题的解(通常使用表格等数据结构存储),避免重复计算,从而高效地解决复杂的全局最优问题。
在这里插入图片描述

目录

  • 小红取数
    • 算法思路
    • 代码实现

小红取数

小红取数
在这里插入图片描述

算法思路

由于不同的选择组合,除以k后得到的余数也不相同,当选择一个数加上后,所得到的新值除以k后余数有可能会发生变化,而为了将这些值都能存起来并且找出最大的且余数为0的组合,我们要使用动态规划。因为能产生的余数有k中情况,于是创建一个长度为kdp数组。j作为dp数组的索引也表示相应位置存放的数值除k后的余数,所以最终的答案一定是dp[0]上的数。动态规划的初始状态就是所有数都不选,即和为0的时候余数为0,所以dp[0]初始设为0而其余的位置设为负无穷。用num遍历数组中的每个数,然后尝试加到dp数组中的每一个值上,得到新值为dp[j]+num,很容易会想到这个新值除以k的余数为(dp[j]+num)%k。但是!如果用(dp[j]+num)%k作为索引去访问dp中的元素就出现了bug,这是因为我们初始化的时候把索引0后的位置设为了负无穷,这样导致产生了无效的索引。为了能成功访问到新值除以k后的余数所对应的位置,可以利用同余的性质,当前位置的数除以k的余数为j是规定好的,而这个数在加上num之后,他除以k后的余数就为(j+num%k)%k。接着找到余数为(j+num%k)%k的位置上的值dp[(j+num%k)%k]dp[j]+num作比较,取较大者更新即可。而为了避免产生垃圾数据,在循环内部的操作都是在dp的副本数组上实现的,循环结束后再更新原dp数组

代码实现

n,k = map(int, input().split())
a = list(map(int, input().split()))
dp = [float('-inf')]*k
dp[0] = 0 
for num in a:new_dp = dp[:]# 复制一份dpfor j in range(k):# 遍历每个余数所对应的位置new_dp[(j+num%k)%k] = max(new_dp[(j+num%k)%k], dp[j]+num)# 如果当前余数的位置上的值加上num后得到的这个数大于这个数除k的余数的位置上的值,则更新dp = new_dp# 更新dp
print(dp[0] if dp[0] > 0 else -1)
http://www.ds6.com.cn/news/74419.html

相关文章:

  • 紫竹桥网站建设google关键词seo
  • 淄博网站制作定制品牌百度排名点击软件
  • 做网站公司怎么找北京建站公司
  • 网站怎么做短信营销公司网站开发费用
  • 怎么做网页版手机版网站廊坊首页霸屏优化
  • 哪些网站可以接设计的单子做新媒体运营岗位职责
  • 软件论坛网站有哪些拼多多怎么查商品排名
  • 承德seo搜索推广成都seo优化
  • 百度网站关键词和网址收录网站的平台有哪些
  • 领先的手机网站设计智能建站网站模板
  • 广州做网站基本流程佛山百度网站快速排名
  • 浙江疫情最新消息中高风险地区廊坊网站排名优化公司哪家好
  • 用手机制作宣传单的appseo服务外包客服
  • 有没有日本人教做料理的网站有域名有服务器怎么做网站
  • 做dm素材网站黄页推广2021
  • 上海工厂网站建设如何自己创建一个网站
  • 网站模板怎么引用网站模板购买
  • 常州网站建设公司哪个好廊坊seo网络推广
  • 聊城 网站建设营销软件站
  • 装饰装修网站模板建设新东方在线教育平台官网
  • 网站开发职业足球队世界排名榜
  • 博物馆网站建设目的深圳网站优化平台
  • 全运网站的建设公司官网制作多少钱
  • 河间做网站价格平台推广怎么做
  • 农村致富小型加工厂深圳网站快速排名优化
  • 制作一个网站的流程恶意点击竞价是用的什么软件
  • wordpress注册logo重庆百度快照优化排名
  • 免费做淘客cms网站爱站网站seo查询工具
  • 建设网站设备预算镇江百度推广
  • 源码网站git佛山优化推广