首页 > 其他分享 >被3整除的子序列

被3整除的子序列

时间:2024-04-09 22:14:06浏览次数:18  
标签:case int 50 break 序列 整除 dp MOD

题目描述

给你一个长度为50的数字串,问你有多少个子序列构成的数字可以被3整除
答案对1e9+7取模

输入描述

输入一个字符串,由数字构成,长度小于等于50

输出描述

输出一个整数

代码实现

#include<iostream>
#include<string>

using namespace std;

//这里利用了两个性质
//1.添加下一个字符后,其实在之前的子串的尾部加上,还有其本身就可以了
//2.如果之前%3 为 2,那么下一个找mod3等于1的,加起来就是mod3 == 0的了
const int MOD = 1e9 + 7;

int main()
{
    string s;
    cin >> s;
    long long dp[50][3];  //记录数据
    dp[0][0] = 0;
    dp[0][1] = 0;
    dp[0][2] = 0;
    dp[0][(s[0] - '0') % 3]++;
    const int N = s.size();
    for (int i = 1; i < N; ++i)
    {
        int value = (s[i] - '0') % 3;
        switch (value)
        {
            //1 + 原来子串 + 原来子串和s[i]
        case 0:
            dp[i][0] = (dp[i - 1][0] * 2 + 1) % MOD;
            dp[i][1] = (dp[i - 1][1] * 2) % MOD;
            dp[i][2] = (dp[i - 1][2] * 2) % MOD;
            break;
        case 1:
            dp[i][0] = (dp[i - 1][0] + dp[i - 1][2]) % MOD;
            dp[i][1] = (dp[i - 1][1] + dp[i - 1][0] + 1) % MOD;
            dp[i][2] = (dp[i - 1][2] + dp[i - 1][1]) % MOD;
            break;
        case 2:
            dp[i][0] = (dp[i - 1][0] + dp[i - 1][1]) % MOD;
            dp[i][1] = (dp[i - 1][1] + dp[i - 1][2]) % MOD;
            dp[i][2] = (dp[i - 1][2] + dp[i - 1][0] + 1) % MOD;
        default:
            break;
        }
    }
    cout << dp[N - 1][0] << endl;

    return 0;

}

 

标签:case,int,50,break,序列,整除,dp,MOD
From: https://www.cnblogs.com/Kellen-Gram/p/18124958

相关文章

  • 基于GA优化的CNN-LSTM-Attention的时间序列回归预测matlab仿真
    1.算法运行效果图预览ga优化前:     ga优化后:    2.算法运行软件版本matlab2022a  3.算法理论概述      时间序列预测是许多领域中的核心问题,如金融市场分析、气候预测、交通流量预测等。近年来,深度学习在时间序列分析上取得了显著的成果,尤......
  • 记一次php反序列化漏洞中的POPchain和POC构造实战
    来自于橙子科技反序列化靶场源代码如下:<?php//flagisinflag.phphighlight_file(__FILE__);error_reporting(0);classModifier{private$var;publicfunctionappend($value){include($value);echo$flag;}publicfunction......
  • 最长公共子序列(线性dp)-java
    本文主要来描述两个字符串的最长公共子序列问题文章目录前言一、最长公共子序列二、算法思路1.dp[i][j]的四种情况2.dp[i-1][j]、dp[i][j-1]、dp[i-1][j-1]的关系3.dp数组的状态转移方程 4.dp数组具体如下三、代码如下1.代码如下(示例):2.读入数据3.代码运行结......
  • LeetCode题练习与总结:排列序列--60
    一、题目描述给出集合 [1,2,3,...,n],其所有元素共有 n!种排列。按大小顺序列出所有排列情况,并一一标记,当 n=3时,所有排列如下:"123""132""213""231""312""321"给定 n和 k,返回第 k 个排列。示例1:输入:n=3,k=3输出:"213"示例2:输入:n=4,k=......
  • Rome反序列化链分析
    环境搭建<dependencies><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.11</version><scope>test</scope></dependency><de......
  • R语言多元Copula GARCH 模型时间序列预测|附代码数据
    原文链接  http://tecdat.cn/?p=2623原文出处:拓端数据部落公众号 最近我们被要求撰写关于CopulaGARCH的研究报告,包括一些图形和统计输出。和宏观经济数据不同,金融市场上多为高频数据,比如股票收益率序列。直观的来说,后者是比前者“波动”更多且随机波动的序列,在一元或多元......
  • CF156D-Prufer序列、多项式定理
    link:https://codeforces.com/contest/156/problem/D题意:给一张无向简单图\(G\),问有多少种加边的方式,使得图联通,并且需要加的边最小。\(|E|,|V|\leq10^5\),对\(k\)取模前置知识应该是Prufer序列(这题应该是绕不开这个东西)对每个连通分支考虑答案,如果有\(k\)个连通分支,大小......
  • .net xml序列化与xml反序列化
    序列化stringxmlStr="";vardto=newReqDto(){ErrorCode=200,ReqName="test"};XmlSerializerserializer=newXmlSerializer(typeof(ReqDto));using(StringWritertextWriter=newStringWriter()){serializer.Serialize(textWr......
  • Django框架之序列化组件
    一、为什么要序列化呢?我们在写一些项目前后端是分离的,这意味着无法直接利用django提供的模版语法来实现前后端的数据交互,需要将数据转换成前后端都能接收处理的格式,即json,一般的格式都是列表套字典。那么我的前端想拿到由ORM得到的数据库里面的一个个用户对象,而我的后端也想直接......
  • @JSONField 坑点 结论:若属性是私有的,必须有set*方法。否则无法反序列化。
    @JSONField坑点结论:若属性是私有的,必须有set*方法。否则无法反序列化。@JSONField坑点结论:若属性是私有的,必须有set*方法。否则无法反序列化。原因:主要原因是JSONField注解是通过反射来操作对象的属性的,而在Java类中一般情况下,字段是私有的,不能直接访问。所以需要......