B - 秋实大哥掰手指

Time Limit: 3000/1000MS (Java/Others)     Memory Limit: 2048/1024KB (Java/Others)
Submit Status

秋实大哥发现数据结构专题出到了N题,但是他一时算不出来已经有了几道题,他就萌萌地掰手指数。 这个时候他发现,虽然人们根据手指数创造了十进制数,但是两只手同时能表达的数是0-10一共十一个数字。 这样,他觉得如果用手指表现十进制数,同一个十进制数就会有很多种不同的表现方法。 比如,110这样一个十进制数,就有110(1*100+1*10+0*1),AA(10*10+10*1 )和10A(1*100+0*10+10*1)三种表示方法(A表示伸出十根手指)。

现在给你一些十进制数,聪明的你能不能计算出按照秋实大哥的方法,每个数能有多少种表现方式(方案数对1000000007取模)。

Input

只有一组数据,第一行一个数字n,表示人赢给出的数字的长度。 第二行一个整数a(1<=a<=1e1000000),表示给出的十进制数。

Output

对于每组数据输出一个整数,表示输入的数人赢有多少种表示方法(结果可能很大,取模1000000007的余数)。

Sample input and output

Sample Input Sample Output
1
1
1
3
110
3
6
100100
11

Hint

注意内存~~ 怎么处理课上会讲呀~~

解题报告:

根据题目条件,我们不难想到上一位最多只能缺 10 (即在上一位摆的数比规定数字少 1 ),那么我们可以设计这样的状态:

F( i , 0 )  表示第 i 位为止,不缺 10 的方案数.

F( i , 1 )  表示第 i 位为止,缺 10 的方案数.

如何转移呢?

我们先假设当前正在转移第 i 位,且第 i 位的数字为 Number.

显然有

f( i , 0 )  += f( i – 1 , 0 ) ; //上一位就不缺,这一位也不缺,正常摆.

If (Number == 0)

f( i , 0 )  += f( i – 1 , 1 ) ;  //上一位缺了 10 ,这位恰好是 0 ,补上.

f( i , 1 )  += f( i – 1 , 1 ) ;  //上一直缺了 10 ,这次不妨摆 9 ,转移到下一位依然缺 10

else if (Number == 1)

f( i , 1 )  += f( i – 1 , 1 )  //这一位需要 11 ,摆 10 ,转移到下一位依然缺 10

f( i , 1 )  += f( i – 1 , 0 )  //上一位不缺,这一位摆的数少 1 ,转移到下一位缺 10

else

f( i , 1 )  += f( i – 1 , 0 )  //上一位不缺,这一位摆的数少 1 ,转移到下一位缺 10

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <stdbool.h>
typedef long long ll;
ll mod = ;
ll f[][];
/*
0 到上次为止,不缺
1 到上次为止,缺10
*/
int cur = ;
void init_()
{
int i;
for(i = ; i <= ; ++ i)
f[cur][i] = ;
} int main(int argc,char *argv[])
{
int n,i,j,c,k;
scanf("%d",&n);
char ch;
while()
{
ch = getchar();
if (ch == '\n')
break;
}
memset(f,,sizeof(f));
//
ch = getchar();
int num = ch - '';
f[cur][] = ;
if (num != )
f[cur][] = ;
//
for(i = ; i < n ; ++ i)
{
cur ^= ;
init_();
ch = getchar();
int num = ch - '';
f[cur][] = (f[cur][] % mod+ f[cur^][] % mod ) % mod;
if (num == )
{
f[cur][] = (f[cur][] % mod+ f[cur^][] % mod) % mod;
f[cur][] = (f[cur][] % mod+ f[cur^][] % mod) % mod;
}
else if(num == )
{
f[cur][] = (f[cur][] % mod + f[cur^][] % mod ) % mod;
f[cur][] = (f[cur][] % mod + f[cur^][] % mod) % mod;
}
else
{
f[cur][] = (f[cur][] % mod + f[cur^][] % mod ) % mod;
}
}
printf("%lld\n",f[cur][] % mod);
return ;
}

UESTC_秋实大哥掰手指 2015 UESTC Training for Dynamic Programming<Problem B>的更多相关文章

  1. UESTC_秋实大哥搞算数 2015 UESTC Training for Data Structures<Problem N>

    N - 秋实大哥搞算数 Time Limit: 3000/1000MS (Java/Others)     Memory Limit: 65535/65535KB (Java/Others) Subm ...

  2. UESTC_秋实大哥打游戏 2015 UESTC Training for Data Structures<Problem H>

    H - 秋实大哥打游戏 Time Limit: 3000/1000MS (Java/Others)     Memory Limit: 65535/65535KB (Java/Others) Subm ...

  3. UESTC_秋实大哥去打工 2015 UESTC Training for Data Structures<Problem G>

    G - 秋实大哥去打工 Time Limit: 3000/1000MS (Java/Others)     Memory Limit: 65535/65535KB (Java/Others) Subm ...

  4. UESTC_秋实大哥与家 2015 UESTC Training for Data Structures<Problem E>

    E - 秋实大哥与家 Time Limit: 3000/1000MS (Java/Others)     Memory Limit: 65535/65535KB (Java/Others) Submi ...

  5. UESTC_秋实大哥与战争 2015 UESTC Training for Data Structures<Problem D>

    D - 秋实大哥与战争 Time Limit: 3000/1000MS (Java/Others)     Memory Limit: 65535/65535KB (Java/Others) Subm ...

  6. UESTC_秋实大哥与快餐店 2015 UESTC Training for Data Structures<Problem C>

    C - 秋实大哥与快餐店 Time Limit: 3000/1000MS (Java/Others)     Memory Limit: 65535/65535KB (Java/Others) Sub ...

  7. UESTC_秋实大哥与花 2015 UESTC Training for Data Structures<Problem B>

    B - 秋实大哥与花 Time Limit: 3000/1000MS (Java/Others)     Memory Limit: 65535/65535KB (Java/Others) Submi ...

  8. UESTC_秋实大哥与小朋友 2015 UESTC Training for Data Structures<Problem A>

    A - 秋实大哥与小朋友 Time Limit: 3000/1000MS (Java/Others)     Memory Limit: 65535/65535KB (Java/Others) Sub ...

  9. UESTC_邱老师选妹子(二) 2015 UESTC Training for Dynamic Programming<Problem I>

    I - 邱老师选妹子(二) Time Limit: 3000/1000MS (Java/Others)     Memory Limit: 65535/65535KB (Java/Others) Su ...

随机推荐

  1. 从运维角度浅谈 MySQL 数据库优化

    一个成熟的数据库架构并不是一开始设计就具备高可用.高伸缩等特性的,它是随着用户量的增加,基础架构才逐渐完善.这篇博文主要谈MySQL数据库发展周期中所面临的问题及优化方案,暂且抛开前端应用不说,大致分 ...

  2. [转]Hulu 2013北京地区校招笔试题

    填空题: 1.中序遍历二叉树,结果为ABCDEFGH,后序遍历结果为ABEDCHGF,逆序遍历结果为? 2.对字符串HELL0_HULU中的字符进行二进制编码,使得字符串的编码长度尽可能短,最短长度为 ...

  3. Linux SD/MMC/SDIO驱动分析

    一.SD/MMC/SDIO概念区分 SD(SecureDigital)与 MMC(MultimediaCard) SD 是一种 flash memory card 的标准,也就是一般常见的 SD 记忆 ...

  4. 2301: [HAOI2011]Problem b

    2301: [HAOI2011]Problem b Time Limit: 50 Sec  Memory Limit: 256 MBSubmit: 4164  Solved: 1888[Submit] ...

  5. iOS 3DES加密 和 java 3DES 解密

    首先进入头文件: #import <CommonCrypto/CommonDigest.h> #import <CommonCrypto/CommonCryptor.h> #i ...

  6. mac下显示隐藏文件

    一.在终端中 ls -a就可以查看隐藏文件. 显示和隐藏的命令例如以下: 显示:defaults write com.apple.finder AppleShowAllFiles -bool true ...

  7. HTML基础知识笔记(一)

    HTML定义 HTML指的是超文本标记语言 HTML不是编程语言,而是标记语言 标记语言是一套标记标签 HTML是用标记标签来描述网页   HTML标签1 <html></html& ...

  8. (转)浅谈ASP.NET报表控件

    项目中有报表图形化的需求, 于是开始在网上找第三方chart控件.因时间紧迫,大至确定了几个候选:一.Office带的OWC控件:二.ComponentOne:三.Web Chart.本文将讲解ASP ...

  9. hdu120118岁生日

    Problem Description Gardon的18岁生日就要到了,他当然很开心,可是他突然想到一个问题,是不是每个人从出生开始,到达18岁生日时所经过的天数都是一样的呢?似乎并不全都是这样,所 ...

  10. HDU 5735 - Born Slippy

    题意: 一棵 n 个节点的根树,i 节点权重 wi 对每一个节点s,找到这样一个长 m 的标号序列 v : 1. vi是vi-1 的祖先 2. f[s] = w[vi] + ∑(i=2, m) (w[ ...