题意:

      给你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火柴(递推+大数)的更多相关文章

  1. Tiling(递推+大数)

    Description In how many ways can you tile a 2xn rectangle by 2x1 or 2x2 tiles? Here is a sample tili ...

  2. Children’s Queue HDU 1297 递推+大数

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=1297 题目大意: 有n个同学, 站成一排, 要求 女生最少是两个站在一起, 问有多少种排列方式. 题 ...

  3. ACM学习历程—HDU1041 Computer Transformation(递推 && 大数)

    Description A sequence consisting of one digit, the number 1 is initially written into a computer. A ...

  4. 【hdoj_1865】1sting(递推+大数)

    题目:http://acm.hdu.edu.cn/showproblem.php?pid=1865 本题的关键是找递推关系式,由题目,可知前几个序列的结果,序列长度为n=1,2,3,4,5的结果分别是 ...

  5. poj 2506 Tiling(递推 大数)

    题目:http://poj.org/problem?id=2506 题解:f[n]=f[n-2]*2+f[n-1],主要是大数的相加; 以前做过了的 #include<stdio.h> # ...

  6. Buy the Ticket HDU 1133 递推+大数

    题目连接: http://acm.hdu.edu.cn/showproblem.php?pid=1133 题目大意: 有m+n个人去买电影票,每张电影票50元,  m个人是只有50元一张的,  n个人 ...

  7. ACM学习历程—HDU1023 Train Problem II(递推 && 大数)

    Description As we all know the Train Problem I, the boss of the Ignatius Train Station want to know  ...

  8. 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 ...

  9. HDU1134/HDU1133 递推 大数 java

    Game of Connections Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Othe ...

随机推荐

  1. Python3+pygame中国象棋 代码完整 非常好 有效果演示

    这几天看到抖音上有个妹子下象棋超级猛,我的中国象棋也差不到哪去啊,走 做一个.... 一.运行效果 二.代码 下面的代码用到图片素材(images文件夹),下载地址如下:https://www.itp ...

  2. OpenCV计算机视觉学习(13)——图像特征点检测(Harris角点检测,sift算法)

    如果需要处理的原图及代码,请移步小编的GitHub地址 传送门:请点击我 如果点击有误:https://github.com/LeBron-Jian/ComputerVisionPractice 前言 ...

  3. 《Asp.Net Core3 + Vue3入坑教程》 - 6.异常处理与UserFriendlyException

    简介 <Asp.Net Core3 + Vue3入坑教程> 此教程适合新手入门或者前后端分离尝试者.可以根据图文一步一步进操作编码也可以选择直接查看源码.每一篇文章都有对应的源码 目录 & ...

  4. 确保某个BeanDefinitionRegistryPostProcessor Bean被最后执行的几种实现方式

    目录 一.事出有因 二.解决方案困境 三.柳暗花明,终级解决方案 第一种实现方案 第二种实现方案 第三种实现方案 四.引发的思考 一.事出有因 ​ 最近有一个场景,因同一个项目中不同JAR包依赖同一个 ...

  5. 选择 FreeBSD 而不是 Linux 的技术性原因3

    选择 FreeBSD 而不是 Linux 的技术性原因3 jail FreeBSD Jails 系统是另一个惊人的工程壮举. 在 2000 年 3 月 14 日的 4.0 版本中,FreeBSD 引入 ...

  6. myeclipse js报错

    Myeclipse 版本10.1 加载的js报错,解决方法: window -> preferences -> myeclipse -> validation,在右边下拉框找到 Ja ...

  7. redis雪崩,穿透,击穿

    缓存雪崩:同一时间大量key到过期时间失效,可在设置失效时间时加随机数,如果直接修改数据库,那么一定会有不一致,通过失效时间去反复刷新缩短不一致的时间, 为了避免数据一直存在,一定要设置过期时间如果通 ...

  8. JVM虚拟机知识问答总结(简单复习,快速回忆!)

    写在最前面 这个项目是从20年末就立好的 flag,经过几年的学习,回过头再去看很多知识点又有新的理解.所以趁着找实习的准备,结合以前的学习储备,创建一个主要针对应届生和初学者的 Java 开源知识项 ...

  9. docker使用常见问题解决方案:错误号码2058,docker WARNING :IPv4,容器间的通讯

    1.错误号码2058 1,错误解决: 解决方法:docker下mysql容器 登录 mysql -u root -p 登录你的 mysql 数据库,然后 执行这条SQL: ALTER USER 'ro ...

  10. java例题_49 计算子串出现的次数

    1 /*49 [程序 49 子串出现的个数] 2 题目:计算字符串中子串出现的次数 3 */ 4 5 /*分析 6 * 1.子串的出现是有标志的,如" ",*,#或者其他 7 * ...