题意:

      给你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;

}  

   

         

         

   

   

最新文章

  1. hibernate的HQL语句
  2. Bzoj3663/4660 CrazyRabbit
  3. SQL键值约束、索引使用
  4. Android 通知栏Notification的整合 全面学习 (一个DEMO让你完全了解它)
  5. java.lang.NoClassDefFoundError: org/objectweb/asm/Type
  6. Spring REST for DELETE Request Method Not Supoorted
  7. 让nginx支持PHP
  8. 再eclipse的javaweb项目中添加JQuery文件时jquery-2.1.4.min.js报错
  9. unity3d Realistic eye shading 真实的眼睛渲染
  10. NgNice项目案例
  11. JBPM4.4 基本使用
  12. Docker 第一篇 认识Docker 的作用好处
  13. 配置rpm包安装的jdk环境变量
  14. App阅读pdf和扫描二维码功能
  15. 管道与popen函数与重定向
  16. PHP中数组的各种用法
  17. Apache JMeter配置、安装
  18. [HDU4787]GRE Words Revenge 解题报告
  19. Nginx入门篇(三)之虚拟主机配置
  20. 利用arduino给PCB800099液晶驱动板烧录程序

热门文章

  1. Typescript开发学习总结(附大量代码)
  2. rest framework ViewSet
  3. C# 应用 - 使用 HttpListener 接受 Http 请求
  4. 关于Python编写时候的一些数据格式调用问题
  5. MySql多表查询_事务_DCL(资料三)
  6. 绿色物流-智慧仓储监控管理 3D 可视化系统
  7. JAVA面试题:输出100以内所有的素数
  8. CSS水平布局
  9. Docker 专题总结
  10. 如何动态生成EasyUI的表头