UVA11375火柴(递推+大数)
题意:
给你n根火柴,问你能组成多少种数字,比如3根可以组成1或者7,组成的数字中不能有前导0,
思路:
我们开一个数组,d[i]记录用i跟火柴可以组成多少种数字,则更新状态是这样的
d[i+c[j]] += d[i], c[j]就是组成数字j要用的火柴数,这样跟新相当于是在模拟写数字,但是有一点就是不能以0开头,左后当火柴数大于等于6的时候就可以在总答案上+1,表示可以构成一个单独的0(因为之前没有0开头的,所以要+1补回来),最后答案就是
Ans[n] = d[1] + d[2] + d[3] + .... + d[n],因为火柴可以不全部用完,还有就是数据比较大,要用大数模拟,这个就不解释了。
#include<stdio.h>
#include<string.h>
#define N 2000 + 5
int d[N][1000];
int Ans[N][1000];
void solve()
{
int i ,j;
int c[] = {6,2,5,5,4,5,6,3,7,6};
memset(d ,0 ,sizeof(d));
d[0][1] = 1;
for(i = 0 ;i <= 2000 ;i ++)
for(j = 0 ;j <= 9 ;j ++)
{
if(!(i==0&&j==0) && i+c[j] <= 2000)
{
//d[i+c[j]] += d[i];
for(int k = 1 ;k <= 888 ;k ++)
d[i+c[j]][k] += d[i][k];
for(int k = 1 ;k <= 888 ;k ++)
{
d[i+c[j]][k+1] += d[i+c[j]][k] / 10;
d[i+c[j]][k] %= 10;
}
}
}
for(i = 1 ;i <= 2000 ;i ++)
{
if(i == 1)
{
for(j = 1 ;j <= 888 ;j ++)
Ans[i][j] = d[i][j];
continue;
}
//Ans[i] = Ans[i-1] + d[i];
for(j = 1 ;j <= 888 ;j ++)
Ans[i][j] = Ans[i-1][j] + d[i][j];
for(j = 1 ;j <= 888 ;j ++)
{
Ans[i][j+1] += Ans[i][j] / 10;
Ans[i][j] %= 10;
}
}
for(i = 6 ;i <= 2000 ;i ++)
{
Ans[i][1] ++;
if(Ans[i][1] >= 10)
for(int k = 1 ;k <= 888 ;k ++)
{
Ans[i][k+1] += Ans[i][k] / 10;
Ans[i][k] %= 10;
}
}
}
int main ()
{
int n ,i ,j;
solve();
while(~scanf("%d" ,&n))
{
for(i = 888 ;i >= 1 ;i --)
if(Ans[n][i]) break;
if(i == 0)
{
printf("0\n");
continue;
}
for(;i >= 1;i --)
printf("%d" ,Ans[n][i]);
printf("\n");
}
return 0;
}
UVA11375火柴(递推+大数)的更多相关文章
- Tiling(递推+大数)
Description In how many ways can you tile a 2xn rectangle by 2x1 or 2x2 tiles? Here is a sample tili ...
- Children’s Queue HDU 1297 递推+大数
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=1297 题目大意: 有n个同学, 站成一排, 要求 女生最少是两个站在一起, 问有多少种排列方式. 题 ...
- ACM学习历程—HDU1041 Computer Transformation(递推 && 大数)
Description A sequence consisting of one digit, the number 1 is initially written into a computer. A ...
- 【hdoj_1865】1sting(递推+大数)
题目:http://acm.hdu.edu.cn/showproblem.php?pid=1865 本题的关键是找递推关系式,由题目,可知前几个序列的结果,序列长度为n=1,2,3,4,5的结果分别是 ...
- poj 2506 Tiling(递推 大数)
题目:http://poj.org/problem?id=2506 题解:f[n]=f[n-2]*2+f[n-1],主要是大数的相加; 以前做过了的 #include<stdio.h> # ...
- Buy the Ticket HDU 1133 递推+大数
题目连接: http://acm.hdu.edu.cn/showproblem.php?pid=1133 题目大意: 有m+n个人去买电影票,每张电影票50元, m个人是只有50元一张的, n个人 ...
- ACM学习历程—HDU1023 Train Problem II(递推 && 大数)
Description As we all know the Train Problem I, the boss of the Ignatius Train Station want to know ...
- Tiling 简单递推+大数
Tiling c[0]=1,c[1]=1,c[2]=3; c[n]=c[n-1]+c[n-2]*2; 0<=n<=250. 大数加法 java time :313ms 1 ...
- HDU1134/HDU1133 递推 大数 java
Game of Connections Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Othe ...
随机推荐
- 文件查询 select name,age where age>22
# 员工信息表: 完善代码,背下来给代码加注释column_dic = {'id': 0, 'name': 1, 'age': 2, 'phone': 3, 'job': 4} # 将文件每一列的名字 ...
- 漫漫Java路1—基础知识2—注释和命名规则
## 注释 1. 单行注释 ```java //这是一个注释 ``` 2. 多行注释 ```java /* 这是一个注释 */ ``` 3. 文档注释 ```java /** * * * */ ``` ...
- spring事务:事务控制方式,使用AOP控制事务,七种事务传播行为,声明事务,模板对象,模板对象原理分析
知识点梳理 课堂讲义 1)事务回顾 1.1)什么是事务-视频01 事务可以看做是一次大的活动,它由不同的小活动组成,这些活动要么全部成功,要么全部失败. 1.2)事务的作用 事务特征(ACID) 原子 ...
- python文件操作以及循环小结
Python中的文件使用建议使用 with open(filename, "r") as f: 的形式进行文件操作,如果忘记关闭文件指针的话,他会帮你自己关闭文件, 如果使用原来的 ...
- string与bson.ObjectId之间格式转换
string转bson.ObjectId bson.ObjectIdHex(string) bson.ObjectId转string日后再补
- FTP操作/Passive/Active控制
1 using System; 2 using System.Collections.Generic; 3 using System.Text; 4 using System.IO; 5 using ...
- PTA 递增的整数序列链表的插入
6-4 递增的整数序列链表的插入 (15 分) 本题要求实现一个函数,在递增的整数序列链表(带头结点)中插入一个新整数,并保持该序列的有序性. 函数接口定义: List Insert( List ...
- 攻防世界 reverse evil
这是2017 ddctf的一道逆向题, 挑战:<恶意软件分析> 赛题背景: 员工小A收到了一封邮件,带一个文档附件,小A随手打开了附件.随后IT部门发现小A的电脑发出了异常网络访问请求,进 ...
- JAVA面试核心知识点(一):计算机网络
一·计算机网络 1.1 网络基础知识 OSI 七层协议(制定标准使用的标准概念框架): 物理层(传递比特流0101)->数据链路层(将比特流转换为逻辑传输线路)->网络层(逻辑编址,分组传 ...
- 图解 | 原来这就是 class
我是一个 .java 文件,名叫 FlashObject.java,叫我小渣就行. public class FlashObject { private String name; priv ...