HDU 1041 Computer Transformation 数学DP题解

时间:2021-12-17 00:49:19

本题假设编程是使用DP思想直接打表就能够了。

假设是找规律就须要数学思维了。

规律就是看这些连续的0是从哪里来的。

我找到的规律是:1经过两次裂变之后就会产生一个00; 00经过两次裂变之后也会产生新的00;故此须要记录好1和00出现的次数就能够递推出后面的00出现的数据了。

公式就是tbl00[i] = tbl00[i-2] + tbl1[i-2]; 当中tbl00是记录00出现的次数,tbl1是出现1出现的次数。

公式事实上是能够化简的,只是我懒得化简了。这种公式非常清楚了。

只是因为这种数极大。故此就须要用到大数运算了。

#include <stdio.h>
#include <vector>
#include <string.h>
#include <algorithm>
#include <iostream>
#include <string>
#include <limits.h>
#include <stack>
#include <queue>
#include <set>
#include <map>
using namespace std; const short MAX_N = 1001;
vector<short> tbl00[MAX_N], tbl1[MAX_N];//inverse saved numbers void plusLarge(vector<short> &c, vector<short> &a, vector<short> &b)
{
short n = (short)a.size(), m = (short)b.size(), carry = 0;
for (short k = 0, d = 0; k < n || d < m || carry; k++, d++)
{
short s1 = k < n? a[k] : 0;
short s2 = d < m? b[d] : 0;
carry = s1 + s2 + carry;
c.push_back(carry % 10);
carry /= 10;
}
} void genTbl()
{
tbl00[0].push_back(0), tbl1[0].push_back(1);
tbl00[1].push_back(0), tbl1[1].push_back(1);
tbl00[2].push_back(1), tbl1[2].push_back(2);
for (short i = 3; i < MAX_N; i++)
{
plusLarge(tbl00[i], tbl00[i-2], tbl1[i-2]);
plusLarge(tbl1[i], tbl1[i-1], tbl1[i-1]);
}
} int main()
{
genTbl();
int n;
while (scanf("%d", &n) != EOF)
{
vector<short> &a = tbl00[n];
short m = (short)a.size();
for (short i = m-1; i >= 0; i--)
{
printf("%d", a[i]);
}
putchar('\n');
}
return 0;
}

HDU 1041 Computer Transformation 数学DP题解的更多相关文章

  1. HDU 1041 Computer Transformation &lpar;简单大数&rpar;

    Computer Transformation http://acm.hdu.edu.cn/showproblem.php?pid=1041 Problem Description A sequenc ...

  2. HDU 1041 Computer Transformation

    这道题目的意思是:一开始有一个数字 1 ,在接下来的时间中,计算机会按照如下规则进行扩展:                0 –> 1 0                1 –> 0 1 ...

  3. HDU 1041&Tab; Computer Transformation(找规律加大数乘)

    主要还是找规律,然后大数相乘 #include<stdio.h> #include<string.h> #include<math.h> #include<t ...

  4. 题解报告:hdu 2196 Computer(树形dp)

    Problem Description A school bought the first computer some time ago(so this computer's id is 1). Du ...

  5. HDU 2196 Computer&lpar;经典树形DP&rpar;

    题意自己看(猜) 题解 这题很经典,就是记录dp[i][0/1/2]分别代表,从i点向下最大和次大深度,和向上最大深度. 然后转移就行了. 我的写法可能太丑了.死活调不出来,写了一个漂亮的 #incl ...

  6. HDU 1069 Monkey and Banana dp 题解

    HDU 1069 Monkey and Banana 纵有疾风起 题目大意 一堆科学家研究猩猩的智商,给他M种长方体,每种N个.然后,将一个香蕉挂在屋顶,让猩猩通过 叠长方体来够到香蕉. 现在给你M种 ...

  7. 【noi 2&period;6&lowbar;9290】&amp&semi;【poj 2680】Computer Transformation(DP&plus;高精度&plus;重载运算符)

    题意:给一个初始值1,每步操作将1替换为01,将0替换为10.问N步操作后有多少对连续的0. 解法:f[i]表示第i步后的答案.可以直接打表发现规律--奇数步后,f[i]=f[i-1]*2-1;偶数步 ...

  8. Computer Transformation(规律,大数打表)

    Computer Transformation Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/ ...

  9. HDU 1003 Max Sum --- 经典DP

    HDU 1003    相关链接   HDU 1231题解 题目大意:给定序列个数n及n个数,求该序列的最大连续子序列的和,要求输出最大连续子序列的和以及子序列的首位位置 解题思路:经典DP,可以定义 ...

随机推荐

  1. &lbrack;No0000AB&rsqb;用Visual Studio 2015在 WIN10 64bit 上编译7-zip &lpar;32 bit&rpar;

    1.7-ZIP简介 7-zip 是一款免费的压缩解压软件.ZIP格式的文件默认被苹果和微软支持,完全不需要额外安装其他软件就可以解压.但对于非US-ASCII编码的文件名和大于2GB的ZIP文件,可能 ...

  2. UVA 11768 Lattice Point or Not&lpar;扩展欧几里德&rpar;

    将直线转化为ax + by = c的形式,然后扩展欧几里得求在[x1, x2]之间的解 对直线与坐标轴平行的特判 调试了好长时间,注意: 1 正负数转化为整型的处理 2 注意判断有无解 #includ ...

  3. JFrame中setDefaultCloseOperation的参数含义

    实例1:一个空的java窗口 // JFrameDemo1.java import javax.swing.*;     //使用Swing类,必须引入Swing包 public class JFra ...

  4. recursion lead to out of memory

    There are two storage areas involved: the stack and the heap. The stack is where the current state o ...

  5. 完善chrome翻译插件ChaZD,支持有道智云api

    首先放上该项目的github地址:https://github.com/codethereforam/ChaZD 之前想找一个chrome支持划词翻译的插件,最终在知乎上看到了这个回答,推荐的是Cha ...

  6. android PakageManagerService启动流程分析

    PakageManagerService的启动流程图 1.PakageManagerService概述 PakageManagerService是android系统中一个核心的服务,它负责系统中Pac ...

  7. RPC详解

    RPC(Remote Procedure Call),即远程过程调用,是一个分布式系统间通信的必备技术,本文体系性地介绍了 RPC 包含的核心概念和技术,希望读者读完文章,一提到 RPC,脑中不是零碎 ...

  8. mysql更新字段内容

    update article set a_content = REPLACE(`a_content`,'www.abc.com','www.bcd.com')

  9. 一、JAVA内存区域与内存溢出异常

    在虚拟机自动内存管理机制的帮助下,不在需要为每一个操作区写相对应的delete/free代码来进行内存释放.进而不容易出现内存泄露和内存溢出的问题,由虚拟机管理内存,貌似这一切看起来很好.也正是因为j ...

  10. JQuery - 阻止回车键

    JQuery 和 js 禁止enter回车事件方法 jQuery版 $(window).keydown( function(e) { var key = window.event?e.keyCode: ...