UESTC_秋实大哥掰手指 2015 UESTC Training for Dynamic Programming<Problem B>
B - 秋实大哥掰手指
Time Limit: 3000/1000MS (Java/Others) Memory Limit: 2048/1024KB (Java/Others)
秋实大哥发现数据结构专题出到了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 |
3 |
3 |
6 |
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>的更多相关文章
- UESTC_秋实大哥搞算数 2015 UESTC Training for Data Structures<Problem N>
N - 秋实大哥搞算数 Time Limit: 3000/1000MS (Java/Others) Memory Limit: 65535/65535KB (Java/Others) Subm ...
- UESTC_秋实大哥打游戏 2015 UESTC Training for Data Structures<Problem H>
H - 秋实大哥打游戏 Time Limit: 3000/1000MS (Java/Others) Memory Limit: 65535/65535KB (Java/Others) Subm ...
- UESTC_秋实大哥去打工 2015 UESTC Training for Data Structures<Problem G>
G - 秋实大哥去打工 Time Limit: 3000/1000MS (Java/Others) Memory Limit: 65535/65535KB (Java/Others) Subm ...
- UESTC_秋实大哥与家 2015 UESTC Training for Data Structures<Problem E>
E - 秋实大哥与家 Time Limit: 3000/1000MS (Java/Others) Memory Limit: 65535/65535KB (Java/Others) Submi ...
- UESTC_秋实大哥与战争 2015 UESTC Training for Data Structures<Problem D>
D - 秋实大哥与战争 Time Limit: 3000/1000MS (Java/Others) Memory Limit: 65535/65535KB (Java/Others) Subm ...
- UESTC_秋实大哥与快餐店 2015 UESTC Training for Data Structures<Problem C>
C - 秋实大哥与快餐店 Time Limit: 3000/1000MS (Java/Others) Memory Limit: 65535/65535KB (Java/Others) Sub ...
- UESTC_秋实大哥与花 2015 UESTC Training for Data Structures<Problem B>
B - 秋实大哥与花 Time Limit: 3000/1000MS (Java/Others) Memory Limit: 65535/65535KB (Java/Others) Submi ...
- UESTC_秋实大哥与小朋友 2015 UESTC Training for Data Structures<Problem A>
A - 秋实大哥与小朋友 Time Limit: 3000/1000MS (Java/Others) Memory Limit: 65535/65535KB (Java/Others) Sub ...
- UESTC_邱老师选妹子(二) 2015 UESTC Training for Dynamic Programming<Problem I>
I - 邱老师选妹子(二) Time Limit: 3000/1000MS (Java/Others) Memory Limit: 65535/65535KB (Java/Others) Su ...
随机推荐
- Grunt 插件开发与调式
1 grunt是什么 官方网站解释的很清楚,http://gruntjs.com/ http://gruntjs.cn/ 它是一种javascript任务运行器,对于需要反复重复的任务,例如压缩.编译 ...
- bzoj1752 [Usaco2005 qua]Til the Cows Come Home
Description Bessie is out in the field and wants to get back to the barn to get as much sleep as pos ...
- Axure设计分析作业-实例解析
本文转载自人人都谁产品经理,作者完全使用Axure做了这一个产品需求文档.文档地址:http://1passwordmanager.sinaapp.com/ 大家可以先睹为快.这个PRD完全使用axu ...
- HDOJ-1013 Digital Roots
http://acm.hdu.edu.cn/showproblem.php?pid=1013 1.给出一个整数,求每一位上的数字之和 2.若求出的和大于1位,则对该和继续执行第1步,直至和的位数为1 ...
- Activity的onSaveInstanceState()和onRestoreInstanceState()方法
首先Android的Activity生命周期如下图: Activity的onSaveInstanceState()和onRestoreInstanceState()并不是生命周期方法,他们不同于onC ...
- C++ I/O标准库
C++学习: 返回指向函数的指针: int (*ff(int))(int *,int) 想写好这样的代码很难,含义:首先将ff声明为一个函数,它带有一个int形参.该函数返回 int (*)(int* ...
- 《Java程序员面试笔试宝典》之switch使用时有哪些注意事项
switch语句用于多分支选择,在使用switch(expr)的时候,expr只能是一个枚举常量(内部也是由整型或字符类型实现)或一个整数表达式,其中整数表达式可以是基本类型int或其对应的包装类In ...
- nodejs报错 events.js:72 throw er; // Unhandled 'error' event
var http = require('http'); var handlerRequest = function(req,res){ res.end('hello');}; var webServe ...
- 代码先行-log4Net初体验
1.安装 从http://logging.apache.org/log4net/download_log4net.cgi下载编译好的log4Net包并解压. 找到 bin\net\4.0\releas ...
- WIN7系统JavaEE(java+tomcat7+Eclipse)环境配
在进行 Java Web环境开发之前,首先要做的第一件事就是搭建开发环境,开发环境搭建成功,接下来便是对整个开发环境进行测试,可以通过编写一个简单的JSP 程序发布到Tomcat应用服务器上运行. 1 ...