动态规划

被3整除的子序列

https://ac.nowcoder.com/acm/problem/21302

  1. 动态规划的问题。想了好久终明白了,先写下来自己看了别人后的理解,免得以后又忘记了。
  2. 思路:整体的思路就是,把输入的数字按顺序放到一个数组里面,然后每次依次加入一个数字。举一个例子,512。

    1、这时数组arr中的数据为5、1、2。然后进行循环。先进行第一次循环,先处理数字5。因为5对3取模的结果为2,所以dp[1][2]加一(即在只有5的情况下,对3取模只能得到余数为2的一个结果)。
    2、接下来再对第一层进行处理,因为第0层都是零,所以第一层的值不变。
    3、接下来开始操作第二个数,1对3取模是1,所以先让dp[2][1]=1,这一步其实就是看这一个数字单独的时候对3取模。然后循环操作这一层,因为1对3取模剩下一个1,与之前剩下2的那些数字结合正好能够满足拼成一个3,所以dp[2][0]=dp[2][0]+dp[1][0]+dp[1][2],dp[2][1]=dp[2][1]+dp[1][1]+dp[1][0],dp[2][2]=dp[2][2]+dp[1][2]+dp[1][1]。这一步的操作其实就是这个数字单独和之前对3取模剩下相应数字的和,然后加上能够与当前数字对3取模的和正好构成3的之前的数字的和。
    4、之后的步骤类似与第三步。

import java.util.*;

public class Solution {
    /*这里先定义好求余数的值。
    static int mod = 1000000000 + 7;
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        String data = in.next();
        char[] arr = data.toCharArray();
        int len = data.length();

        /*这里定义出一个长度为输入的数字位数加一,且每一层有三个位置的二维数组。
        int[][] dp = new int[len + 1][3];
        for (int i = 1; i <= len; i++) {

            /*这里先看看当前这个数字对3取模得到几。然后把相应的位置上加一
            int m = (arr[i - 1] - '0') % 3;
            dp[i][m] += 1;

            /*这里是一次操作这个数字加上之后余数分别为0、1、2的个数。
            for (int j = 0; j < 3; j++) {
                dp[i][j] += (dp[i - 1][j] + dp[i - 1][(j + 3 - m) % 3])%mod;
            }
        }
        /*最后打印出所有数字都加上之后能够被三整除的有多少个。
        System.out.println(dp[len][0]);
    }
}
全部评论
本意是求j-m 但是为了取模,防止变成负数加了3
点赞 回复 分享
发布于 2022-10-13 17:11 江西
最后一个为什么是j+3-m 这一块一直没有理解
点赞 回复 分享
发布于 2021-03-04 23:08

相关推荐

有很多问题,求大佬们解答,谢谢大佬们:不知道现在该怎么投实习,该怎么准备内心很纠结学校课程和实习到底怎么选择,&nbsp;自己也不想课程学业这边出问题,&nbsp;是不是只能投暑期实习,具体时间该怎么安排前端面试也需要准备算法么,&nbsp;自己的算法能力很薄弱,&nbsp;面试题需要准备到什么程度?没有ai项目经验的话,我该如何去补充,如何去找好的ai项目
smile丶snow:1.简历尽量一页,比如教育经历那里,全日制,计算机学院这些可以去掉没啥用好浪费空间。 熟悉三件套就没必要写了吧。js基本上是这样写 * JavaScript核心:深入理解 JS 运行机制(事件循环 Event Loop、微任务/宏任务),熟练掌握 Promise/Async 异步编程 模型。 熟悉可以改成熟练掌握。组件库写一个ant感觉就行,多写了浪费空间。 旅游项目是不是jonas的natours啊,我之前简历也有这个。我之前是这样写的 全栈思维: 熟悉 Node.js/Express 后端架构,掌握 MongoDB 数据库设计与聚合查询 工程化我觉得还是少些吧,不写就问的少,如果你真的了解的话可以写。 1.实习的话推荐大厂官网和aoob上面投,我自己有写一个校招网站的小网站可以直达~github主页上面有,顺便求个关注( 2.大三下一般课程比较少了吧,如果学校比较严的话可以多沉淀一会,如果不太严可以请dai课然后去实习,尽量找个近一些的就行。暑期实习不是暑假才实习哦,基本是上3月底4月初发offer就可以过去了,然后大概暑假的时候走转正流程答辩。 3.大厂算法题+js手写体。hot100+常见的比如数组转树,Promise.all,deepClone,之类 js手写都不难其实。算法看自己能力吧,我其实算法能力也不行。 4.自己平时没有用AI Coding吗?自己想一下怎么让AI帮你更好的写代码~比如Skill的诞生,OpenSpec的诞生,不都是我们想让AI更好帮我们写代码吗。
我的实习日记
点赞 评论 收藏
分享
03-19 09:58
河海大学 Java
最喜欢春天的奇亚籽很...:同学,是小红书不是小哄书,一眼就能看到的错误
投了多少份简历才上岸
点赞 评论 收藏
分享
哈哈哈,你是老六:百度去年裁员分评不好,赶紧弄点红包
点赞 评论 收藏
分享
评论
12
收藏
分享

创作者周榜

更多
正在热议
更多
# 一张图晒出你司的标语 #
4381次浏览 77人参与
# AI面会问哪些问题? #
28254次浏览 566人参与
# 开放七大实习专项,百度暑期实习值得冲吗 #
15401次浏览 223人参与
# 你的实习产出是真实的还是包装的? #
20431次浏览 343人参与
# 找AI工作可以去哪些公司? #
9367次浏览 248人参与
# 春招至今,你的战绩如何? #
66404次浏览 586人参与
# 厦门银行科技岗值不值得投 #
8112次浏览 188人参与
# 从事AI岗需要掌握哪些技术栈? #
9204次浏览 322人参与
# 中国电信笔试 #
32078次浏览 295人参与
# 你做过最难的笔试是哪家公司 #
34361次浏览 246人参与
# 投递几十家公司,到现在0offer,大家都一样吗 #
340972次浏览 2175人参与
# 哪些公司真双非友好? #
69702次浏览 289人参与
# 阿里笔试 #
179029次浏览 1318人参与
# 机械人避雷的岗位/公司 #
62709次浏览 393人参与
# 小马智行求职进展汇总 #
25140次浏览 80人参与
# 第一份工作一定要去大厂吗 #
14907次浏览 122人参与
# 金三银四,你的春招进行到哪个阶段了? #
22250次浏览 284人参与
# 担心入职之后被发现很菜怎么办 #
291382次浏览 1210人参与
# 为了减少AI幻觉,你注入过哪些设定? #
26283次浏览 310人参与
# 应届生第一份工资要多少合适 #
20694次浏览 86人参与
# HR最不可信的一句话是__ #
6352次浏览 114人参与
# 沪漂/北漂你觉得哪个更苦? #
10045次浏览 194人参与
牛客网
牛客网在线编程
牛客网题解
牛客企业服务