【OpenJudge9272】【DP】偶数个数字3

偶数个数字3

总时间限制: 10000ms 单个测试点时间限制: 1000ms 内存限制: 131072kB

【描述】

在所有的N位数中,有多少个数中有偶数个数字3?

【输入】

一行给出数字N,N<=1000

【输出】

如题

【样例输入】

2

【样例输出】

73

【Solution】

  用dp[i][1]表示i位数有奇数个三的数量,dp[i][0]表示有偶数个三的数量。dp[i][1]可以从dp[i-1][1]首位添加0 1 2 4 5 6 7 8 9和dp[i-1][0]首位添加3转移,dp[i][0]同理。注意当i==N时首位不能添加0。

  AC代码:

  

 1 #include <cstdio>
 2 int N;
 3 int dp[1010][2];
 4 int main(){
 5     scanf("%d",&N); dp[1][1]=1; dp[1][0]=9;
 6     for(int i=2;i<=N;++i){
 7         int k=i==N?8:9;
 8         dp[i][0]=dp[i-1][0]%12345*k+dp[i-1][1]%12345;
 9         dp[i][1]=dp[i-1][1]%12345*k+dp[i-1][0]%12345;
10     }
11     printf("%d",dp[N][0]%12345);
12     return 0;
13 }
时间: 2024-10-09 06:02:20

【OpenJudge9272】【DP】偶数个数字3的相关文章

【noi 2.6_9272】偶数个数字3(DP)

题意:问所有的N位数中,有多少个有偶数个数字3的数. 解法:f[i][j]表示i位数中含数字3的个数模2为j的个数.于是分第i位填3还是不填3讨论. 小tip:要模12345:for循环新定义了一个变量会慢一点点~ 1 #include<cstdio> 2 #include<cstdlib> 3 #define N 1010 4 #define mod 12345 5 6 int f[2][2]; 7 int main() 8 { 9 int n; 10 scanf("%

[容斥原理][dp]JZOJ P3056 数字

[问题描述] 一个数字被称为好数字当他满足下列条件: 1. 它有2*n个数位,n是正整数(允许有前导0) 2. 构成它的每个数字都在给定的数字集合S中. 3. 它前n位之和与后n位之和相等或者它奇数位之和与偶数位之和相等 例如对于n=2,S={1,2},合法的好数字有1111,1122,1212,1221,2112,2121,2211,2222这样8种. 已知n,求合法的好数字的个数mod 999983. Input 第一行一个数n. 接下来一个长度不超过10的字符串,表示给定的数字集合. Ou

混乱无序的整数数组如何实现左侧全是奇数右侧全是偶数(数字不要求排序)

今天同事估计闲得蛋疼,突然开始回忆以前面试过程中被面到过的一些面试问题,有逻辑的,有算法的,然后来考我思路,标题对应的算法就是他碰到的面试算法题之一. 拿到题目的第一个感觉,就是Linq,被Linq带坏了,这种考算法的题目直接来Linq你都逗谁呢,整理一下思路,恩,题目只要求左侧奇数,右侧偶数,并未要求两侧的整数还要分别排序,那算法思路就这么定下来了,按索引从低向高循环,如果遇到偶数,则在循环内进行反向循环,即从高位向低位循环找奇数来实现两者位置交替,算法实现如下: static void Se

【基础练习】【棋盘DP】codevs2193 数字三角形ww题解

转载请注明出处 CSDN ametake版权所有 题目描述 Description 数字三角形必须经过某一个点,使之走的路程和最大 输入描述 Input Description 第1行n,表示n行 第2到n+1行为每个的权值 程序必须经过n div 2,n div 2这个点 输出描述 Output Description 最大值 样例输入 Sample Input 2 1 1 1 样例输出 Sample Output 2 数据范围及提示 Data Size & Hint n <=25 今天听

【DP】组合数字

Password Attacker 题意就是给 M 个关键字,组合成 N 字符长度的结果,每一个关键字都必须在 N 位的字符中出现,有多少种可能结果. 范围 1 ≤ M ≤ N ≤ 100. 举例假设 M = 3(key = 3, 7, 5)  N = 4 位字符长度 结果可以为3577, 3557, 7353, 5735. 下面的结果是不合法的 1357 // 1 没有在key中,不是合法关键字 3355 // 7 是关键字,但是结果中没有出现 357 // 结果必须是一个4位长度 思路1:

【基础练习】【线性DP】codevs2622 数字序列(最大连续子序列和)题解

版权信息 转载请注明出处 [ametake版权所有]http://blog.csdn.net/ametake欢迎来看 这道题目本质就是朴素的最大连续子序列和 直接上题目和代码 题目描述 Description 给定一个长度为n的一个序列A1,A2,-,An,求序列中连续子序列的最大和. 例如:当输入为-5,3,5,7,-15,6,9,27,-36,10时,连续子序列6,9,27的和为42是最大值:而当序列变成-5,3,5,8,-15,6,9,27,-36,10时,连续子序列3,5,8,-15,6

DP 例题: 数字三角形

从上层到最底层进行走迷宫,路过房间拿到奖劵,问累积最多拿多少奖劵 Code: 1 #include <stdio.h> 2 #include <iostream> 3 #include <algorithm> 4 #include <math.h> 5 #include <string.h> 6 #include <vector> 7 #include <queue> 8 using namespace std; 9 10

leetcode-168周赛-1295-统计位数为偶数的数字

题目描述: 方法一:O(N) class Solution: def findNumbers(self, nums: List[int]) -> int: ans=0 for num in nums: if len(str(num))%2==0: ans+=1 return ans 方法二:数学 O(N) class Solution: def findNumbers(self, nums: List[int]) -> int: return sum(1 for num in nums if

数位dp——奏响数字数位的美妙乐章

数位dp:处理数字数位关系的一种dp方式. 一般的题目特征十分明显: 1.一般和数字本身有很大关系. 2.一般求数字在区间L,R中的一些信息 3.L,R一般很大,通常能达到long long级别. dp方式也比较有套路: 一般有三种方法: 本质上的相似之处,都是集中在处理"填数有无限制","填数无限制情况下的固定方案数","某些已经搜出来的固定方案数" 1.记忆化搜索(没用过) 是一种倒着记忆的方法. 2.递推(我基本都是这个方法) 正着递推出答