题意:

      给你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. Java 重入锁和读写锁

    本文部分摘自<Java 并发编程的艺术> 重入锁 重入锁 ReentrantLock,顾名思义,就是支持重进入的锁,它表示该锁能够支持一个线程对资源的重复加锁.除此之外,该锁还支持获取锁时 ...

  2. webpack4.x 从零开始配置vue 项目(二)基础搭建loader 配置 css、scss

    序 上一篇已经把基本架子搭起来了,现在来增加css.scss.自动生成html.css 提取等方面的打包.webpack 默认只能处理js模块,所以其他文件类型需要做下转换,而loader 恰恰是做这 ...

  3. sqlmap在https下的一种错误 - ssl连接失败

    在昨天与师傅的交流中师傅考了我一个问题,在用sqlmap跑的时候遇到ssl爆红该怎么办,因为在实战中并没有遇到过这种情况,所以今天补一下知识. 首先查询了ssl的概念,通俗来说,如果一个网站没有安装s ...

  4. 1-认识c指针

    1.指针和内存 c程序在编译后,会以三种形式使用内存 1静态/全局内存 静态声明的变量分配在这里,全局变量也使用这部分内存.这些变量在程序开始运行时分配,直到程序终止时才会消失 2.自动内存 这些变量 ...

  5. SparkSQL中产生笛卡尔积的几种典型场景以及处理策略

    [前言:如果你经常使用Spark SQL进行数据的处理分析,那么对笛卡尔积的危害性一定不陌生,比如大量占用集群资源导致其他任务无法正常执行,甚至导致节点宕机.那么都有哪些情况会产生笛卡尔积,以及如何事 ...

  6. LookupError: 'hex' is not a text encoding; use codecs.decode() to handle arbitrary codecs

    问题代码: b=b'\x01\x02\x03' x=binascii.b2a_hex(b.decode('hex')[::-1].encode('hex')) python2下是不报错的,因为pyth ...

  7. pycharm在debug时总是报UnicodeDecodeError

    1,原文链接 解决pycharm run 正常 debug 报 UnicodeDecodeError 错误的问题 2,解决方法 首先尝试 如果上面还不行

  8. 图解 | 原来这就是 IO 多路复用

    为了讲多路复用,当然还是要跟风,采用鞭尸的思路,先讲讲传统的网络 IO 的弊端,用拉踩的方式捧起多路复用 IO 的优势. 为了方便理解,以下所有代码都是伪代码,知道其表达的意思即可. Let's go ...

  9. Centos7安装nexus(maven私服)以及maven的相关配置

    一.nexus安装: 1.获取nexus下载地址: 查询nexus最新版本地址:https://help.sonatype.com/repomanager3/download 当前最新版本为nexus ...

  10. python中zip函数的使用

    zip(*iterables) zip可以将多个可迭代对象组合成一个迭代器对象,通过迭代取值,可以得到n个长度为m的元组.其中n为长度最短可迭代对象的元素个数,m为可迭代对象的个数.并且每个元组的第i ...