递归--练习11--noi9273 PKU2506Tiling

一、心得

 25 a[i]%=10;(高精度时)
26 这里错了,花了好久改好
27
28
29 int* f(int n){
30 if(dp[n][0]!=0) return dp[n];
31 else if(0==n) return dp[0];
32 else if(1==n) return dp[1];
33 else{
34
35 give(jia(f(n-1),chen(f(n-2),2)),dp[n]);
36 return dp[n];
37 }
38 }
39 直接这样写的话f(n-1)那些的值一直被改变 ,指针需要去看看
40 二维指针就是地址
41
42 整个测试有多组数据,请做到文件底结束。
43 while(scanf("%d",&n)!=EOF){

二、题目

9273:PKU2506Tiling

总时间限制: 
2000ms

单个测试点时间限制: 
1000ms

内存限制: 
131072kB
描述

对于一个2行N列的走道。现在用1*2,2*2的砖去铺满。问有多少种不同的方式。

下图是一个2行17列的走道的某种铺法。

输入

整个测试有多组数据,请做到文件底结束。每行给出一个数字N,0 <= n <= 250

输出

如题

样例输入
2
8
12
100
200
样例输出
3
171
2731
845100400152152934331135470251
1071292029505993517027974728227441735014801995855195223534251

三、AC代码

 /*
noi9273 PKU2506Tiling 就是好好找子问题就好了 找出递推关系式即可:
第一块1*2横放:
f(n)=f(n-2)
第一块1*2竖放:
f(n)=f(n-1)
第一块2*2:
f(n)=f(n-2) 故f(n)=f(n-1)+2*f(n-2);
边界条件
f(0)=1
f(1)=1
f(2)=3 高精度 (用个2维数组把每一个数的每一位都存下来即可)
其实加和乘里面只需要有加,因为乘2完全可以看成想加
记忆化递归 a[i]%=10;
这里错了,花了好久改好 int* f(int n){
if(dp[n][0]!=0) return dp[n];
else if(0==n) return dp[0];
else if(1==n) return dp[1];
else{ give(jia(f(n-1),chen(f(n-2),2)),dp[n]);
return dp[n];
}
}
直接这样写的话f(n-1)那些的值一直被改变 ,指针需要去看看
二维指针就是地址 整个测试有多组数据,请做到文件底结束。
while(scanf("%d",&n)!=EOF){
*/
#include <iostream>
#define Max 300
using namespace std;
int dp[Max][Max];//用个2维数组把每一个数的每一位都存下来
//打印结果
void print(int dp[]){
for(int i=dp[];i>=;i--){
cout<<dp[i];
}
cout<<endl;
}
//高精度乘单精度
int* chen(int a[],int b){
//乘
for(int i=;i<=a[];i++){
a[i]*=b;
}
//处理进位
for(int i=;i<=a[];i++){
if(a[i]>=){
a[i]%=;
a[i+]++;
}
}
//更正位数
while(a[a[]+]>) a[]++;
return a;
}
//高精度加法
int* jia(int a[],int b[]){
if(a[]<b[]) a[]=b[];
//加
for(int i=;i<=a[];i++){
a[i]+=b[i];
}
//处理进位
for(int i=;i<=a[];i++){
if(a[i]>=){
a[i]%=;
a[i+]++;
}
}
//更正位数
while(a[a[]+]>) a[]++;
return a; }
//赋值,把ans数组的值全部给dp数组
void give(int ans[],int dp[]){
for(int i=;i<=ans[];i++){
dp[i]=ans[i];
}
}
int* f(int n){
if(dp[n][]!=) return dp[n];
else if(==n) return dp[];
else if(==n) return dp[];
else{
int tmp_1[Max]={};
int tmp_2[Max]={};
give(f(n-),tmp_1);
give(f(n-),tmp_2);
give(jia(tmp_1,chen(tmp_2,)),dp[n]);
return dp[n];
}
} int main(){
dp[][]=,dp[][]=;//前面是位数,后面是数
dp[][]=,dp[][]=;
int n=;
while(scanf("%d",&n)!=EOF){
f(n);
print(dp[n]);
}
return ;
}

递归--练习11--noi9273 PKU2506Tiling的更多相关文章

  1. poj 题目分类(1)

    poj 题目分类 按照ac的代码长度分类(主要参考最短代码和自己写的代码) 短代码:0.01K--0.50K:中短代码:0.51K--1.00K:中等代码量:1.01K--2.00K:长代码:2.01 ...

  2. POJ题目分类(按初级\中级\高级等分类,有助于大家根据个人情况学习)

    本文来自:http://www.cppblog.com/snowshine09/archive/2011/08/02/152272.spx 多版本的POJ分类 流传最广的一种分类: 初期: 一.基本算 ...

  3. 学习记录 java 链表知识

    01.import java.util.HashMap; 02.import java.util.Scanner; 03.import java.util.Stack; 04. 05./** 06. ...

  4. Mac下的常用Shell命令

    今天介绍一下在Mac的终端中一些常用的Shell命令: 1.查看当前工作目录的完整路径 pwd (pwd的原意是:print work directiory,而不是密码password的意思,呵呵) ...

  5. POJ题目细究

    acm之pku题目分类 对ACM有兴趣的同学们可以看看 DP:  1011   NTA                 简单题  1013   Great Equipment     简单题  102 ...

  6. leetcode & lintcode for bug-free

    刷题备忘录,for bug-free leetcode 396. Rotate Function 题意: Given an array of integers A and let n to be it ...

  7. (5)微信二次开发 之 XML格式数据解析

    1.首先理解一下html html的全名是:HyperText Transfer markup language 超级文本标记语言,html本质上是一门标记(符合)语言,在html里,这些标记是事先定 ...

  8. c语言基础学习06

    =============================================================================涉及到的知识点有:1.C语言库函数.字符输入函 ...

  9. C++学习(二十一)(C语言部分)之 函数2

    复习 函数名 函数名称 调用时需要函数名加上相应的参数函数类型 void 返回值(根据函数的需要)参数函数体  用来写函数的一个定义 函数怎样实现都现在其中函数声明 函数定义 定义如果放在调用的后面, ...

随机推荐

  1. Oracle下Update语句

    Update更新 格式: update table _name(表名) set col_name(列名) =expr(表达式) where  conti(条件) 案例1: update 语法可以用新值 ...

  2. htop 分析 进程对资源的消耗

    [root@d ~]# htop -hhtop 2.2.0 - (C) 2004-2018 Hisham MuhammadReleased under the GNU GPL. -C --no-col ...

  3. 设置UCHome注册登陆退出的跳转页自定义

    UCHome 默认注册.登录成功后跳转到 http://www.xxx.com/home/space.php?do=home 退出后会跳转到站点的首页,即 http://www.xxx.com/hom ...

  4. Spark2.0 shuffle service

    Spark 的shuffle 服务是spark的核心,本文介绍了非ExternalShuffleClient的方式,看BlockService的整个架构.ShuffleClient是整个框架的基础,有 ...

  5. 非线性方程(组):一维非线性方程(一)二分法、不动点迭代、牛顿法 [MATLAB]

    1. 二分法(Bisection) 1) 原理 [介值定理] 对于连续的一元非线性函数,若其在两个点的取值异号,则在两点间必定存在零点. [迭代流程] 若左右两端取值不同,则取其中点,求其函数值,取中 ...

  6. Django:学习笔记(8)——文件上传

    Django:学习笔记(8)——文件上传 文件上传前端处理 本模块使用到的前端Ajax库为Axio,其地址为GitHub官网. 关于文件上传 上传文件就是把客户端的文件发送给服务器端. 在常见情况(不 ...

  7. (ZT)谷歌大脑科学家 Caffe缔造者 贾扬清 微信讲座完整版

    一.讲座正文:大家好!我是贾扬清,目前在Google Brain,今天有幸受雷鸣师兄邀请来和大家聊聊Caffe.没有太多准备,所以讲的不好的地方还请大家谅解.我用的ppt基本上和我们在CVPR上要做的 ...

  8. VS2010/MFC编程入门之二十二(常用控件:按钮控件Button、Radio Button和Check Box)

    言归正传,鸡啄米上一节中讲了编辑框的用法,本节继续讲解常用控件--按钮控件的使用. 按钮控件简介 按钮控件包括命令按钮(Button).单选按钮(Radio Button)和复选框(Check Box ...

  9. 15信号sigaction

    信号处理 信号值小于 SIGRTMIN 的信号 (1~31) 都是不可靠信号 某些unix版本中,调用信号函数处理后会自动恢复默认信号处理,所以在信号处理函数中还需要继续调用signal函数设置信号处 ...

  10. ZOJ Monthly, January 2019

    A: Little Sub and Pascal's Triangle Solved. 题意: 求杨辉三角第n行奇数个数 思路: 薛聚聚说找规律,16说Lucas 答案是 $2^p \;\;p 为 n ...