递归--练习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. 【git】------git的基本命令------【巷子】

    001.初始化仓库,创建git仓库 git init 002.配置个人信息 git config --global user.name <名字> --------->:配置用户名 g ...

  2. Oracle性能优化之oracle里表、索引、列的统计信息

    一.表的统计信息 表的统计信息用于描述表的详细信息,包括记录数(num_rows).表块的数量(blocks).平均行长度(avg_row_len)等典型维度.这些维度可以通过数据字典表DBA_TAB ...

  3. SQL基础--查询之五--查询语句一般格式

    SQL基础--查询之五--查询语句一般格式

  4. docker网络部分源码分析

    daemon初始化network controller daemon的配置,网络部分的内容在cmd/dockerd/config_common_unix.go中指定,默认设置一般都为空 // daem ...

  5. mysql 约束条件 auto_increment 自动增长起始值 布长 起始偏移量

    我们指定一个字段为自动增长,他默认从1开始自动增长,默认值为1,每次增长为1,步长为1 模糊查询 like % 代表任意个数字符 任意字符长度 查看mysql正在使用变量 show variables ...

  6. 103-advanced-上下文

    上下文提供了一种通过组件树传递数据的方法,无需在每个级别手动传递道具. 在典型的React应用程序中,数据通过prop自上而下(父到子)传递,但对于应用程序中许多组件所需的某些类型的道具(例如场所偏好 ...

  7. 使用Atom预览markdown

    1.打开任意.md文件(markdown源文件)2.windows : ctrl + shift + pmac : command + shift + p这条命令跟Sublime Text是一样的,打 ...

  8. Flask系列(八)flask-session组件

    一.简介 flask-session是flask框架的session组件,由于原来flask内置session使用签名cookie保存,该组件则将支持session保存到多个地方,如: redis:保 ...

  9. cocos代码研究(19)Widget子类ImageView学习笔记

    理论基础 显示图片的小控件,继承自 Widget . 代码实践 static ImageView * create()创建一个空的ImageView static ImageView * create ...

  10. 中文乱码—Servlet—SpringMVC

    一.SpringMVC中的中文乱码问题 a:处理全局请求的中文乱码(配置Web.xml的字符编码过滤器) <filter> <filter-name>encodingFilte ...