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 ...
随机推荐
- Python Flask框架路由简单实现
Python Flask框架路由的简单实现 也许你听说过Flask框架.也许你也使用过,也使用的非常好.但是当你在浏览器上输入一串路由地址,跳转至你所写的页面,在Flask中是怎样实现的,你是否感到好 ...
- 分布式基础理论之CAP 和BASE
前言 本文聊聊 CAP 定理和 BASE 理论. CAP 定理 C:一致性(Consistency) 数据的强一致性.希望分布式系统只读到最新写入的数据 A:可用性(Availability) 分布式 ...
- Sentinel高级
Sentinel高级 sentinel和springCloud整合 减少开发的复杂度,对大部分的主流框架,例如:Web Servlet.Dubbo.Spring Cloud.gRPC.Spring W ...
- python多线程参考文章
1. https://www.jianshu.com/p/c93e630d8089 2.https://www.runoob.com/python/python-multithreading.html ...
- 如何在 ASP.Net Core 中实现 健康检查
健康检查 常用于判断一个应用程序能否对 request 请求进行响应,ASP.Net Core 2.2 中引入了 健康检查 中间件用于报告应用程序的健康状态. ASP.Net Core 中的 健康检查 ...
- python网络编程-TCP服务端的开发
#TCP服务端开发 2 #方法说明 3 """ 4 bind(host,port)表示绑定端口号,host是ip地址,ip地址一般不进 行绑定,表示本机的任何一个ip地址 ...
- 循环3n加1问题
package 第二章; import java.util.Scanner; //int 32位整数 /* * 猜想:对于任意大于一的自然数n,若n为奇数,则将n变为3n+1,否则变为n的一半 经过 ...
- Java学习之路 -- Java怎么学?
@ 目录 java基础怎么学? 学完基础学什么? 几个常用框架学完学什么? MQ JVM的知识跑不掉 微服务等等 其他 数据结构和算法 java基础怎么学? 当时,作为懵懂的小白,大一学习了c和c++ ...
- Androi Studio 之 LinearLayout
LinearLayout •常用属性 •注意事项 当 android:orientation="vertical" 时, 只有水平方向的设置才起作用,垂直方向的设置不起作用 a ...
- 去空格的四则运算表达式求值-Java
笔记 package com.daidai.day4.demo1; import java.util.ArrayList; import java.util.Arrays; import java.u ...