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


来源:牛客网

时间限制:C/C++ 1秒,其他语言2秒
空间限制:C/C++ 524288K,其他语言1048576K
64bit IO Format: %lld

题目描述

给你一个长度为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: 无限制

思路:

一个数字能够被3整除的条件:数字各位和能够整除3
设dp[i][j]位前i位和为j,
## 那么包含前面的选择,对于第j位有选与不选两种决策:
第j位为数字num;
选:dp[i][j] += dp[i-1][j-num];
不选:dp[i][j]  = dp[i-1][j];
对于选的情况是:加上num恰巧等于j,即原来是j-num,
(j-num可能为负数,此时要加上余数再取余)
和能够整除3,那么 各位数字和 %3有:0 1 2三种取值
所以有:
num = num % 3;
选:dp[i][j] = dp[i-1][(j-num + 3)%3];
不选:dp[i][j]  = dp[i-1][j];## 不包含前面的选择,即对num本身
对于num,它本身也要算上

AC代码:

#include <bits/stdc++.h>
using namespace std;
const int mod = 1e9+7;
int dp[55][5];
int main()
{char s[55];cin>>(s+1);int len = strlen(s+1);for(int i = 1; i <= len; i++){int num = (s[i] - '0') % 3;for(int j = 0; j <= 2; j++){dp[i][j] = (dp[i-1][j] + dp[i-1][(j-num+3)%3])%mod;}//num本身dp[i][num] = (dp[i][num] + 1) % mod;}cout<<dp[len][0]<<endl;return 0;
}

被3整除的子序列(简单dp)相关推荐

  1. 4.15 每周作业 —— 简单DP

    免费馅饼 Time Limit : 2000/1000ms (Java/Other)   Memory Limit : 65536/32768K (Java/Other) Total Submissi ...

  2. 第三讲 数学与简单DP【完结】

    目录 1205. 买不到的数目 [数学结论题] 1211. 蚂蚁感冒 [模拟 / 推理] 1216. 饮料换购 [简单 / 模拟] 2. 01背包问题 [板子题] 1015. 摘花生 [简单DP] 8 ...

  3. Codeforces 41D Pawn 简单dp

    题目链接:点击打开链接 给定n*m 的矩阵 常数k 以下一个n*m的矩阵,每一个位置由 0-9的一个整数表示 问: 从最后一行開始向上走到第一行使得路径上的和 % (k+1) == 0 每一个格子仅仅 ...

  4. hdu2067 简单dp或者记忆化搜索

    题意: 小兔的棋盘 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Sub ...

  5. POJ1088:滑雪(简单dp)

    题目链接:  http://poj.org/problem?id=1088 题目要求: 一个人可以从某个点滑向上下左右相邻四个点之一,当且仅当高度减小.求可以滑落的最长长度. 题目解析: 首先要先排一 ...

  6. hdu 2881(简单dp)

     题意:n*n的矩阵,里面有m个格子是有任务要去完成的,t,x,y表示要在第t秒到达(x,y)的格子完成任务,问你最多可以完成多少 解题思路:简单dp,将时间排个序后就是LIS #include< ...

  7. P1005 矩阵取数游戏(__int128模板/简单dp)

    转跳P1005 题目描述 帅帅经常跟同学玩一个矩阵取数游戏:对于一个给定的 n \times mn×m 的矩阵,矩阵中的每个元素 a_{i,j}a i,j ​ 均为非负整数.游戏规则如下: 每次取数时 ...

  8. 最少拦截系统,简单dp,(学长说这是贪心?!。。。。。。也是醉了)

     description 某国为了防御敌国的导弹袭击,发展出一种导弹拦截系统.但是这种导弹拦截系统有一个缺陷:虽然它的第一发炮弹能够到达任意的高度,但是以后每一发炮弹都不能超过前一发的高度.某天, ...

  9. HDU 1158【简单dp】

    题意:给你一个项目,需要几个月来完成买,同时也给你每个月最少需要的工人数.并且告诉你hiring,firing每个工人的钱数,以及每个月应付每个工人的工资.求项目完成时最小花费. 这是个简单dp,思路 ...

  10. HDU 5375 Gray code (简单dp)

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5375 题面: Gray code Time Limit: 2000/1000 MS (Java/Ot ...

最新文章

  1. python怎么用matplotlib生成图表_Python让图表奔跑起来,Matplotlib的神奇用处
  2. php httphelper,C#的HttpHelper类post ,get
  3. 路径中 “./“、“../“、“/“ 代表的意思
  4. android双联动列表,Android Fragment实现列表和内容联动
  5. python连续读取邮件_Python读取指定日期邮件的实例
  6. html 倒计时毫秒,实现毫秒级倒计时
  7. python描述对象静态特性的数据为_The couple wanted to adopt the black boy they had been _______._学小易找答案...
  8. animator时长缩放是什么_TCP 窗口缩放、时间戳和 SACK(1) | Linux 中国
  9. R语言柯西(cauchy)分布
  10. 关于 网页 链接 分享朋友圈 更换title 文字方法
  11. 记录js定时器产生 Deferred long-running timer task(s) to improve scrolling smoothness
  12. 记事本不能显示“联通”二字的原因
  13. Task2 数据分析
  14. Git下载和安装步骤
  15. 算法相关-互联网计算广告学
  16. Qt学习之信号与槽函数断开:disconnect
  17. 我所学到的EC-2(个人学习总结,不能保证正确,欢迎大佬指正)
  18. 揭秘微信「看一看」 是如何为你推荐的
  19. tophat2安装和问题的解决
  20. 保姆级Red Hat没有yum命令、报错This system is not registered to Red Hat Subscription Management.

热门文章

  1. 重装机兵java_重装机兵之机甲咆哮
  2. 面向dba的linux shell 脚本简介,面向 DBA 的 Linux Shell 脚本简介
  3. jupyter下使用conda环境
  4. Python八种数据导入方法,你掌握了吗?
  5. java反射机制原理详解_java反射机制的详细讲解
  6. 拨号云服务器怎么自动配置网关_教你在阿里云创建增强型云网关
  7. 图形结构:克隆图,图的遍历的应用,递归和迭代
  8. 教你如何看手相掌握命运!
  9. JS -- Unexpected trailing comma
  10. 【Normal Form】数据库表结构设计所遵从的范式