每日一题 1155. 掷骰子等于目标和的方法数(中等,动态规划,前缀和)

news2025/1/15 3:20:05

在这里插入图片描述

  1. 涉及到从 n-1 个骰子到 n 个骰子的状态转移,显然用动态规划做
  2. 对于一共 i 个骰子所能投出来的数字之和为 t 的情况,我们用 dp[i][t] 表示,显然 dp[i][t] = Σdp[i - 1][t - j],其中 j 从 1 到 k。
  3. 所以对于每一个骰子我们需要 O(target * k) 的时间复杂度去计算,一共有 n 个骰子,那么总的时间复杂度为 O(n * target * k)
class Solution:
    def numRollsToTarget(self, n: int, k: int, target: int) -> int:
        l = [1 if i > 0 and i <= k else 0 for i in range(target + 1)]
        
        for i in range(n - 1):
            t = [0] * (target + 1)
            for m in range(1, target + 1):
                for j in range(1, k + 1):
                    if m - j > 0:
                        t[m] += l[m - j]
                        t[m] %= 10**9 + 7
            l = t.copy()
        
        return l[target]

显然三重循环看着就很呆,考虑优化
注意到当我们每次更新 dp[i][t] 时需要对 t 之前 k 范围内的所有 dp[i - 1] 求和,那么”范围求和“一定就是想到前缀和,只要先对 dp[i - 1] 求所有的前缀和,那么只需要 O(n * target) 就可以实现目标

class Solution:
    def numRollsToTarget(self, n: int, k: int, target: int) -> int:
        l = [1 if i > 0 and i <= k else 0 for i in range(target + 1)]
        
        for i in range(n - 1):
            t = [0] * (target + 1)
            for m in range(1, target + 1):
                t[m] = t[m - 1] + l[m] 
                if m > k:
                    t[m] -= l[m - k]
                t[m] %= 10**9 + 7
            for j in range(1, target + 1):
                l[j] = t[j - 1]
                l[j] %= 10**9 + 7
        
        return l[target]

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

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

相关文章

【C++心愿便利店】No.10---C++之模板

文章目录 前言一、泛型编程二、函数模板三、类模板 前言 &#x1f467;个人主页&#xff1a;小沈YO. &#x1f61a;小编介绍&#xff1a;欢迎来到我的乱七八糟小星球&#x1f31d; &#x1f4cb;专栏&#xff1a;C 心愿便利店 &#x1f511;本章内容&#xff1a;函数模板、类模…

Delete `␍`eslintprettier/prettier

将CRLF改为LF 然后就消失了 除此之外,也可以修改git全局配置 git config --global core.autocrlf false

ChatGPT 入门指南:与 AI 进行愉快互动的秘诀大揭秘!

ChatGPT 入门指南&#xff1a;与 AI 进行愉快互动的秘诀大揭秘&#xff01; 嗨&#xff01;大家好&#xff0c;我是你们的互联网好友&#xff0c;今天我要给大家带来一份特别的礼物——《ChatGPT 入门指南》&#xff01;是不是很期待呢&#xff1f;那就跟我一起来揭开与人工智能…

海外跨境商城电商源码-进出口电商平台网站-多语言多商户多货币平台

一、海外跨境商城电商源码简介 海外跨境电商已成为全球经济发展的重要推动力。而海外跨境商城电商源码则是实现全球化电商的关键工具。本文将详细介绍海外跨境商城电商源码及其相关内容。 二、如何理解海外跨境商城电商源码 海外跨境商城电商源码是指一套已经开发好并可直接应用…

windows10下pytorch环境部署留念

pytorch环境部署留念 第一步&#xff1a;下载安装anaconda 官网地址 &#xff08;也可以到清华大学开源软件镜像站下载&#xff1a;https://mirrors.tuna.tsinghua.edu.cn/anaconda/archive/&#xff09; 我安装的是下面这个&#xff0c;一通下一步就完事儿。 第二步&#x…

【T3】畅捷通T3采购入库单单据预览,提示不能打开数据表。

【问题描述】 畅捷通T3点击采购入库单预览的时候&#xff0c; 提示ufdtprn窗口&#xff0c;不能打开数据库表SD-20230629HHTI_PurRKD。 【解决方法】 经查看提示的数据表为当前计算机名称&#xff0c; 删除计算机名称中横杠后&#xff0c;重启电脑正常。

PC连wifi,网线连接旭日X3派以共享网络

PC电脑连好wifi&#xff0c;找到【控制面板->网络和Internet->网络和共享中心->查看网络状态和任务->更改适配器设置】 找到WLAN&#xff0c;右键【属性->共享】勾上允许&#xff0c;然后【确定】。 现在去与PC通过网线连接好的X3派上配置&#xff1a; 参考&a…

MySQL MVCC机制探秘:数据一致性与并发处理的完美结合,助你成为数据库高手

一、前言 在分析 MVCC 的原理之前&#xff0c;我们先回顾一下 MySQL 的一些内容以及关于 MVCC 的一些简单介绍。&#xff08;注:下面没有特别说明默认 MySQL 的引擎为 InnoDB &#xff09; 1.1 数据库的并发场景 数据库并发场景有三种&#xff0c;分别是&#xff1a; 读-读…

深入了解JVM调优:解锁Java应用程序性能的秘诀

文章目录 &#x1f34a; JVM调优&#x1f389; 增大Eden 空间大小&#x1f389; 如果MinorGC 频繁&#xff0c;且容易引发 Full GC&#x1f4dd; S1 区大小 < MGC 存活的对象大小&#xff0c;对象的年龄才1岁&#x1f4dd; 相同年龄的对象所占总空间大小>s1区空间大小的一…

ChatGPT和Copilot协助Vue火速搭建博客网站

AI 对于开发人员的核心价值 网上会看到很多 AI 的应用介绍或者教程 使用 AI 聊天&#xff0c;咨询问题 —— 代替搜索引擎使用 AI 写各种的电商文案&#xff08;淘宝、小红书&#xff09;使用 AI 做一个聊天机器人 —— 这最多算猎奇、业余爱好、或者搞个套壳产品来收费 以上…

2023年中国调速器产量、销量及市场规模分析[图]

调速器行业是指生产、销售和维修各种调速器设备的行业。调速器是一种能够改变机械传动系统输出转速的装置&#xff0c;通过调整输入和输出的转速比来实现转速调节的功能。 调速器行业分类 资料来源&#xff1a;共研产业咨询&#xff08;共研网&#xff09; 随着工业自动化程度…

2023/10/23 mysql学习

数据库修改 show databases; 展示所有数据库 create database 数据库名; 创建数据库 create database if not exists 数据库名; 如果未创建过当前数据库名则创建 drop database 数据库名; drop database if exists 数据库名;用法和创建类似 删除数据库 use 数据库名; 跳…

C++数据结构X篇_20_选择排序(不稳定的排序)

「 选择排序 」虽然在实际应用中没有「 插入排序 」广泛&#xff0c;但它也是我们学习排序算法中必不可少的一种。「 冒泡排序 」和「 插入排序 」都是在两层嵌套循环中慢慢比较元素&#xff0c;不停的调整元素的位置。而「 选择排序 」就比较直接了&#xff0c;属于不出手则已…

C# ref用法,实现引用传递(地址传递)

前言&#xff1a; 今天这篇文章我们简单学习一下C# ref的用法&#xff0c;在看别人的代码不至于看不懂逻辑&#xff0c;虽然这是一个比较简单的知识点&#xff0c;但是还是值得我们去学习一下关于这个知识点一些概念&#xff0c;我们知道在C# 中我们的函数参数&#xff0c;一般…

韦东山FreeRTOS(1)ARM架构简明教程

ARM架构简明教程 1. ARM架构 1.1 RISC ARM芯片属于精简指令集计算机(RISC&#xff1a;Reduced Instruction Set Computing)&#xff0c;它所用的指令比较简单&#xff0c;有如下特点&#xff1a; ① 对内存只有读、写指令 ② 对于数据的运算是在CPU内部实现 ③ 使用RISC指…

spy最新安装教程!!青龙+spy,东东豆豆多)

spy最新安装教程&#xff01;&#xff01;青龙spy&#xff0c;东东豆豆多 spy最新安装教程&#xff01;&#xff01;服务器推荐&#xff01;第一步 docker安装下载安装Spy&#xff08;以下教程源自Faker的教程&#xff09;获取Spy授权获取T\*e\*l\*e\*gram API以及参数修改配置…

简单了解一下:NodeJS的WebSocket网络编程

NodeJS的webSocket网络编程。 那什么是WebSocket呢&#xff1f;WebSocket是HTML5提供的一种浏览器和服务器进行通信的网络技术。两者之间&#xff0c;只需要做一个握手动作&#xff0c;就可以在浏览器和服务器之间开启一条通道&#xff0c;就可以进行数据相互传输。 实现WebS…

Linux 进程切换与命令行参数

假设进程1现在要切走了&#xff0c;切入进程2.那进程1就要先保存数据&#xff0c;方便以后恢复&#xff0c; 然后进程2再切走&#xff0c;进程1再把数据还原&#xff1a; 操作系统又分为实时操作系统和分时操作系统。 实时操作系统是是给操作系统一个进程&#xff0c;操作系统…

网络安全https

http是明文的&#xff0c;相当于在网上裸奔&#xff0c;引出了https&#xff0c;大多数网站都转为了https&#xff0c;连非法的赌博网站有的都是https的。 1.https的网站是不是必须让用户装数字证书&#xff1f; 答&#xff1a;分两种&#xff0c;一种是单向认证&#xff0c;像…

桥梁结构健康监测系统落地方案

桥梁结构健康监测的意义是多方面的。首先&#xff0c;它可以实时采集桥梁的结构数据&#xff0c;并对其进行处理和分析&#xff0c;以确定结构损伤的位置、评估桥梁的健康状况&#xff0c;并预测承载力的发展趋势。这有助于及时发现桥梁的结构问题和潜在风险&#xff0c;为采取…