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 ...
随机推荐
- Hadoop集群启动之后,datanode节点未正常启动的问题
Hadoop集群启动之后,用JPS命令查看进程发现datanode节点上,只有TaskTracker进程.如下图所示 master的进程: 两个slave的节点进程 发现salve节点上竟然没有dat ...
- .NET(C#):分析IL中的if-else,while和for语句并用Emit实现
这是一篇关于IL和反射Emit的文章(所以不喜欢IL或者Emit的就没必要往下看了),要求读者对IL和Emit工作原理较了解.所有分析IL均在Visual Studio 2010 SP1下编译生成.( ...
- NPOI之使用EXCEL模板创建报表
因为项目中要用到服务器端创建EXCEL模板 无法直接调用EXCEL 查了下发现NPOI很方便很简单就实现了 其中走了点弯路 第一次弄的时候发现输出的值是文本不是数字型无法直接计算公式 然后又发现打开报 ...
- BOOST 线程完全攻略 - 结束语
modulethread扩展多线程破解通讯 全文介绍了3个boost::thread的扩展类,希望能给大家书写多线程代码带来便捷. thread -> controlled_module_ex ...
- [HeadFirst-HTMLCSS入门][第九章盒模式]
新属性 line-height 行间距 line-height: 1.6em; border 边框 属性值 solid 实线 double 双实线 groove 一个槽 outset 外凸 inset ...
- NET中级课--文件,流,序列化2
1.流的类型体系: 基础流 装饰器流 包装器类 帮助类 2. stream file~ memory~ network~ stream是个 ...
- C#/.Net Post获取数据流的一种简单写法
最近在弄一些第三方的平台,经常调用第三方的接口实现某些特定的功能 在实现的同时基本上都需要本地的数据经过服务器在Request到第三方的服务器中处理,再返回相应的数据结构体:json/xml 以下是我 ...
- 线程:CountDownLatch同步工具
一个同步辅助类,在完成一组正在其他线程中执行的操作之前,它允许一个或多个线程一直等待. 类似计数器,当计数器的值为0时,继续往下执行. package ch03; import java.util.R ...
- html5 视频
HTML规定了一种通过video元素来包含视频的标准方法 一段HTML5视频不可缺少的元素有video.controls等.. 直到现在,仍然不存在一项在网页上显示视频的标准. 大多数视频是通过fla ...
- MongoDB学习笔记04
创建索引使用ensureIndex方法,对于同一个集合,同样的索引只需要创建一次,反复创建是徒劳的. 对某个键的索引会加速对该键的查询,然而,对于其它查询可能没有帮助,即便是查询中包含了被索引的键.实 ...