被3整除的子序列(简单dp)
链接: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)相关推荐
- 4.15 每周作业 —— 简单DP
免费馅饼 Time Limit : 2000/1000ms (Java/Other) Memory Limit : 65536/32768K (Java/Other) Total Submissi ...
- 第三讲 数学与简单DP【完结】
目录 1205. 买不到的数目 [数学结论题] 1211. 蚂蚁感冒 [模拟 / 推理] 1216. 饮料换购 [简单 / 模拟] 2. 01背包问题 [板子题] 1015. 摘花生 [简单DP] 8 ...
- Codeforces 41D Pawn 简单dp
题目链接:点击打开链接 给定n*m 的矩阵 常数k 以下一个n*m的矩阵,每一个位置由 0-9的一个整数表示 问: 从最后一行開始向上走到第一行使得路径上的和 % (k+1) == 0 每一个格子仅仅 ...
- hdu2067 简单dp或者记忆化搜索
题意: 小兔的棋盘 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Sub ...
- POJ1088:滑雪(简单dp)
题目链接: http://poj.org/problem?id=1088 题目要求: 一个人可以从某个点滑向上下左右相邻四个点之一,当且仅当高度减小.求可以滑落的最长长度. 题目解析: 首先要先排一 ...
- hdu 2881(简单dp)
题意:n*n的矩阵,里面有m个格子是有任务要去完成的,t,x,y表示要在第t秒到达(x,y)的格子完成任务,问你最多可以完成多少 解题思路:简单dp,将时间排个序后就是LIS #include< ...
- P1005 矩阵取数游戏(__int128模板/简单dp)
转跳P1005 题目描述 帅帅经常跟同学玩一个矩阵取数游戏:对于一个给定的 n \times mn×m 的矩阵,矩阵中的每个元素 a_{i,j}a i,j 均为非负整数.游戏规则如下: 每次取数时 ...
- 最少拦截系统,简单dp,(学长说这是贪心?!。。。。。。也是醉了)
description 某国为了防御敌国的导弹袭击,发展出一种导弹拦截系统.但是这种导弹拦截系统有一个缺陷:虽然它的第一发炮弹能够到达任意的高度,但是以后每一发炮弹都不能超过前一发的高度.某天, ...
- HDU 1158【简单dp】
题意:给你一个项目,需要几个月来完成买,同时也给你每个月最少需要的工人数.并且告诉你hiring,firing每个工人的钱数,以及每个月应付每个工人的工资.求项目完成时最小花费. 这是个简单dp,思路 ...
- HDU 5375 Gray code (简单dp)
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5375 题面: Gray code Time Limit: 2000/1000 MS (Java/Ot ...
最新文章
- python怎么用matplotlib生成图表_Python让图表奔跑起来,Matplotlib的神奇用处
- php httphelper,C#的HttpHelper类post ,get
- 路径中 “./“、“../“、“/“ 代表的意思
- android双联动列表,Android Fragment实现列表和内容联动
- python连续读取邮件_Python读取指定日期邮件的实例
- html 倒计时毫秒,实现毫秒级倒计时
- python描述对象静态特性的数据为_The couple wanted to adopt the black boy they had been _______._学小易找答案...
- animator时长缩放是什么_TCP 窗口缩放、时间戳和 SACK(1) | Linux 中国
- R语言柯西(cauchy)分布
- 关于 网页 链接 分享朋友圈 更换title 文字方法
- 记录js定时器产生 Deferred long-running timer task(s) to improve scrolling smoothness
- 记事本不能显示“联通”二字的原因
- Task2 数据分析
- Git下载和安装步骤
- 算法相关-互联网计算广告学
- Qt学习之信号与槽函数断开:disconnect
- 我所学到的EC-2(个人学习总结,不能保证正确,欢迎大佬指正)
- 揭秘微信「看一看」 是如何为你推荐的
- tophat2安装和问题的解决
- 保姆级Red Hat没有yum命令、报错This system is not registered to Red Hat Subscription Management.