题意:

      给你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. 目标检测入门论文YOLOV1精读以及pytorch源码复现(yolov1)

    结果展示 其中绿线是我绘制的图像划分网格. 这里的loss是我训练的 0.77 ,由于损失函数是我自己写的,所以可能跟大家的不太一样,这个不重要,重要的是学习思路. 重点提示 yolov1是一个目标检 ...

  2. Codeforces Round #553 B. Dima and a Bad XOR

    题面: 传送门 题目描述: 题意很简单:在一个N*M的矩阵中(N行M列),问是否可以:每行选一个整数,使他们的异或和大于0.如果不可以,输出"NIE":如果可以,输出"T ...

  3. spring-boot记录sql探索

    目标记录每次请求内的http.es.mysql耗时,本篇讨论mysql部分 为什么说要探索,这不是很简单的事么?但是能满足以下几点么? 能记录limit等参数 能将参数和sql写一起,能直接使用 能记 ...

  4. FTT简单入门板子

    DFT : 1 #include <cstdio> 2 #include <iostream> 3 #include <cmath> 4 #include < ...

  5. 攻防世界 reverse Windows_Reverse1

    Windows_Reverse1  2019_DDCTF 查壳 脱壳 脱壳后运行闪退,(或许需要修复下IAT??),先IDA 静态分析一下 int __cdecl main(int argc, con ...

  6. 翻译:《实用的Python编程》06_03_Producers_consumers

    目录 | 上一节 (6.2 自定义迭代) | 下一节 (6.4 生成器表达式) 6.3 生产者,消费者和管道 生成器在设置各种生产者/消费者问题(producer/consumer problems) ...

  7. certutil绕过

    一般进内网过后我都会使用certutil下载文件,但在最近打一台内网机子的时候出现了certutil拒绝访问的情况,在本地搭建了一个环境尝试绕过certutil下载文件. 安装杀软更新到最新版本,开启 ...

  8. Java例题_27 100以内的素数

    1 /*27 [程序 27 求素数] 2 题目:求 100 之内的素数 3 */ 4 5 /*分析 6 * 素数:是指在大于1的自然数中,除了1和它本身以外不再有其他因数的自然数. 7 * 同第二题: ...

  9. PAT (Advanced Level) Practice 1046 Shortest Distance (20 分) 凌宸1642

    PAT (Advanced Level) Practice 1046 Shortest Distance (20 分) 凌宸1642 题目描述: The task is really simple: ...

  10. .NET 6 Preview 3 发布

    前言 2021/4/8 .NET 6 Preview 3 发布,这个版本的改进大多来自于底层,一起来看看都有什么新特性和改进吧. 库改进 新增值类型作为字典值时更快的处理方法 .NET 6 Previ ...