动态规划——牛客21302

本文探讨了一种使用动态规划算法解决特定数学问题的方法,具体为计算一个数字串中能被3整除的子序列数量。通过详细的代码示例和解析,展示了如何初始化状态矩阵和更新状态,最终求得满足条件的子序列总数。

动态规划、

——牛客21302
题目描述
给你一个长度为50的数字串,问你有多少个子序列构成的数字可以被3整除
答案对1e9+7取模
输入描述:
输入一个字符串,由数字构成,长度小于等于50
输出描述:
输出一个整数

示例1
输入
132
输出
3

示例2
输入
9
输出
1

示例3
输入
333
输出
7

示例4
输入
123456
输出
23

示例5
输入
00
输出
3
备注:
n为长度
子任务1: n <= 5
子任务2: n <= 20
子任务3: 无限制

解析:
dp[i][j]+=dp[i-1][j]+dp[i-1][(j-s[i]+‘0’+9)%3];
//在第i位时,当余数是j时,可以等于当在前一位加上或者不加上这一位的值得总和
注意啦:1.这里每个初始值,就是可以当前面什么都没有,从这一未开始,即就单单这一位数的初始值
dp[0][(s[0]-‘0’)%3]=1;//很重要哦
2.就是模的时候一定要注意,中间是否也会超,所以也要加

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
string s;
ll dp[100][3];
int main()
{
    while(cin>>s)
    {
        ll ans=0;
        memset(dp,0,sizeof(dp));
        dp[0][(s[0]-'0')%3]=1;
        for(int i=1;i<s.length();i++){
          dp[i][(s[i]-'0')%3]=1;
          for(int j=0;j<3;j++)
           {
               dp[i][j]+=dp[i-1][j]+dp[i-1][(j-s[i]+'0'+9)%3]%1000000007;
               dp[i][j]%=1000000007;
           }
        }
         printf("%lld\n",dp[s.length()-1][0]);
    }
}

<think>嗯,用户这次明确询问华为笔试的相关信息。从对话历史看,我之前已经整理了结构化信息回复,但用户再次提出相同需求,可能是需要更聚焦或补充内容。 用户可能正在准备华为笔试,属于求职关键期,情绪上可能有些焦虑。ta特意提到引用资料中的"作弊防范"和"题目类型",说明最关切的是考试公平性和备战方向。不过引用资料有些杂乱,需要提取有效信息。 我先快速扫描四个引用:引用1讲严肃笔试的防作弊功能,引用2明确提到华为题库特点——笔试比常规题库更难且偏向应用题,引用3强调题库专业性,引用4展示JavaScript题型示例。这些恰好构成完整链条:考试机制→题目特点→题库质量→具体题型。 需要重点强化用户最关心的两点:一是华为笔试的特殊性(应用题/抽象能力),二是实用备考建议。上次回复的"备考建议"部分可以更具体些,比如补充引用4中提到的输入输出处理技巧(ACM模式)。另外,用户没有说明应聘岗位,若能补充不同岗位的题型差异会更有价值。 注意到引用2和4都涉及编程语言(JavaScript),但用户未指定语言,回复中需保持技术中立。最后要强调防作弊功能对考试公平性的意义,呼应引用1和3的核心价值。 </think>根据站内引用信息和公开资料,华为在平台的笔试相关信息可总结如下: ### 一、笔试核心特点 1. **题目设计导向** - 笔试题目注重**实际场景应用能力**,相比常规算法题库(如LeetCode)更强调问题抽象能力 - 题型包含大量**综合应用题**,需从业务场景中提取算法模型(引用[2]) - 典型题型示例:链表操作(反转/合并)、字符串处理、数学建模等(引用[2][4]) 2. **技术实现要求** - 支持多语言环境:JavaScript(V8)、Java、Python等 - **特殊输入输出处理**:需按ACM模式规范(如JavaScript使用`readline()`获取输入)(引用[4]) - 高频考点: ```javascript // JavaScript V8输入处理示例 while(line = readline()) { let nums = line.split(' ').map(Number) // 解题逻辑... print(result) } ``` 3. **防作弊机制** - 启用**严肃笔试系统**:摄像头监考+屏幕录制+行为异常检测(引用[1][3]) - 题库配备**动态难度调整**与**题目乱序**功能(引用[3]) ### 二、备考建议 1. **能力提升重点** - 强化**场景抽象能力**:练习将实际问题转化为数据结构模型(引用[2]) - 掌握核心算法: - 链表操作(反转/环检测) - 字符串处理(逆序/匹配) - 数学计算(最小公倍数/四舍五入) 2. **平台适应性训练** - 熟悉ACM模式输入输出规范(引用[4]) - 建议在题库分类中针对性练习: ```markdown 华为真题路径:题库 > 公司真题 > 华为 > 笔试算法题(简单/中等/难) ``` ### 三、注意事项 1. **笔试有效性** - 需提前测试设备兼容性(摄像头/浏览器插件) - 禁止多屏幕操作,系统会检测异常切屏(引用[1][3]) 2. **题库动态更新** - 华为题库每年迭代30%以上新题型,建议关注近期真题(引用[3]) > 参考资料:华为近年常考链表反转题解示例 > ```python > def reverse_list(head): > prev = None > while head: > next_node = head.next > head.next = prev > prev = head > head = next_node > return prev > ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值