POJ 2506 Tiling(递推+大整数加法)

http://poj.org/problem?id=2506

题意:

思路:
递推。a[i]=a[i-1]+2*a[i-2]。

计算的时候是大整数加法。错了好久,忘记考虑1了...晕倒。

 1 #include<iostream>
 2 #include<string>
 3 #include<cstring>
 4 #include<cstdio>
 5 using namespace std;
 6
 7 int n;
 8 char s[255][255];
 9
10 void cacl(int i)
11 {
12     int k;
13     int len1 = strlen(s[i - 1]);
14     int len2 = strlen(s[i - 2]);
15     int flag = 0;
16     for (k = 0; k < len2; k++)
17     {
18         int x = s[i - 1][k] - ‘0‘ + 2 * (s[i - 2][k] - ‘0‘);
19         if (flag)
20         {
21             x += flag;
22             flag = 0;
23         }
24         if (x>9)
25         {
26             flag = x / 10;
27             x = x % 10;
28         }
29         s[i][k] = x + ‘0‘;
30     }
31     while (k < len1)
32     {
33         int x = s[i - 1][k] - ‘0‘;
34         if (flag)
35         {
36             x += flag;
37             flag = 0;
38         }
39         if (x>9)
40         {
41             flag = x / 10;
42             x = x % 10;
43         }
44         s[i][k] = x + ‘0‘;
45         k++;
46     }
47     if (flag)  s[i][k] = flag + ‘0‘;
48 }
49
50 void init()
51 {
52     s[0][0] = ‘1‘;
53     s[1][0] = ‘1‘;
54     s[2][0] = ‘3‘;
55     for (int i = 3; i <= 250; i++)
56         cacl(i);
57 }
58
59 int main()
60 {
61     init();
62     while (cin>>n)
63     {
64         int m = strlen(s[n]);
65         for (int i = m-1; i >= 0; i--)
66             cout << s[n][i];
67         cout << endl;
68     }
69 }
时间: 2024-10-30 22:29:34

POJ 2506 Tiling(递推+大整数加法)的相关文章

poj 2506 Tiling 递推

题目链接: http://poj.org/problem?id=2506 题目描述: 有2*1和2*2两种瓷片,问铺成2*n的图形有多少种方法? 解题思路: 利用递推思想,2*n可以由2*(n-1)的状态加上一块竖放2*1的瓷片转移得来,也可以由2*(n-2)的状态加上一块2*2的瓷片或者加上两块横放的2*1的瓷片转移得来. 可得出递推公式:dp[n] = dp[n-1] + dp[n-2]*2: ac秘诀: (1):从输出样例可以看出要用大数来表示,大概需要90位左右. (2):2*0不是零种

POJ 2506 Tiling (递推 + 大数加法模拟 )

Tiling Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 7965   Accepted: 3866 Description In how many ways can you tile a 2xn rectangle by 2x1 or 2x2 tiles? Here is a sample tiling of a 2x17 rectangle. Input Input is a sequence of lines,

(递推 大整数) Children’s Queue hdu1297

Children's Queue Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 16006    Accepted Submission(s): 5337 Problem Description There are many students in PHT School. One day, the headmaster whose n

[ACM] POJ 2506 Tiling (递推,大数)

Tiling Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 7487   Accepted: 3661 Description In how many ways can you tile a 2xn rectangle by 2x1 or 2x2 tiles? Here is a sample tiling of a 2x17 rectangle. Input Input is a sequence of lines,

poj 2506 Tiling(java解法)

题目链接:http://poj.org/problem?id=2506 本题用的java解的,因为涉及到大数问题,如果对java中的大数操作不熟悉请点这儿:链接 思路:地推公式f[i]=f[i-1]+2*f[i-2] code: import java.math.*; import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner cin=new Scanner(Syst

高精度计算(一):大整数加法

C/C++中的int 类型能表示的范围是-231~231 – 1.unsigned 类型能表示的范围是 0 ~232 – 1,即 0~4294967295.所以,int 和unsigned 类型变量,都不能保存超过10 位的整数.有时我们需要参与运算的数,可能会远远不止10 位,例如要求100!的精确值.即便使用能表示的很大数值范围的double 变量,但是由于double变量只有64 位,double 变量的精度也不足以表示一个超过100 位的整数.一般我们称这种基本数据类型无法表示的整数为大

POJ 2506 -TILING

水题,一个小模拟,规律也好找 f3 = f1 * 2 + f2; #include <iostream> #include <cstdlib> #include <cstdio> #include <cstring> #include <algorithm> const int INF = 1e8; const int N = 100; #define ll long long using namespace std; int a[251][N]

A——大整数加法(HDU1002)

题目: I have a very simple problem for you. Given two integers A and B, your job is to calculate the Sum of A + B. InputThe first line of the input contains an integer T(1<=T<=20) which means the number of test cases. Then T lines follow, each line co

日常记录(c语言)--字符串实现大整数加法

运行环境:CentOs 64位--vim 最近在看<剑指offer>这本书,看了前面的关于面试的能力,顿时觉得自己的编程能力差得好远. 可能我对鲁棒的代码理解还不深,我觉得鲁棒应该就是代码可以应对各种不同的输入,都能有相应的处理,并给出相应的输出. 下面是我看了之后对之前做过的大整数加法做了一些完善,之前的只能实现对纯数字字符进行求和,甚至连对空指针的处理都没有,好惭愧.我会用注释来记录自己对此算法的理解. 1 #include <stdio.h> 2 #include <s