递归--练习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. SVN 配置和使用

    SVN使用环境 使用SVN管理源代码,必须有2套环境 服务器 用来存储客户端上传的源码 一般都是在Windows环境下安装Visual SVN Server 客户端 用来提交.回退.修改.下载等操作 ...

  2. Oracle(四):锁

    v$lock:视图列出当前系统持有的或正在申请的所有锁的情况 v$locked_object:视图列出当前系统中哪些对象正被锁定 1).查询当前数据库锁的情况,以及导致锁的sql语句: Select ...

  3. 170712、springboot编程之集成shiro

    这篇文章我们来学习如何使用Spring Boot集成Apache Shiro.安全应该是互联网公司的一道生命线,几乎任何的公司都会涉及到这方面的需求.在Java领域一般有Spring Security ...

  4. Spring-Boot整合freemarker引入静态资源css、js等

    一.概述 springboot 默认静态资源访问的路径为:/static 或 /public 或 /resources 或 /META-INF/resources 这样的地址都必须定义在src/mai ...

  5. 聪明的打字员---poj1184(bfs)

    题目链接:http://poj.org/problem?id=1184 分析:首先可以发现有6*10^6种状态,比较多,不过搜索的时候可以去除一些无用的状态, 可以发现一个点的值(2-5)如果想要改变 ...

  6. [WorldWind学习]18.High-Performance Timer in C#

    In some applications exact time measurement methods are very important. 一些应用程序中精确的时间测量是非常重要的. The of ...

  7. sublime text2和3怎么设置修改字体

    首先,请打开你的sublime text2或3,点击工具栏中的Preferences 然后打开Settings-User 打开Settings-User之后 如下图 请复制以下代码然后粘贴至花括号内 ...

  8. tcpdump-抓包工具-Linux

    环境:VMware-Workstation-12-Pro,Windows-10,CentOS-6.9-x86_64,Xshell5 基本介绍 tcpdump是Linux自带的抓包工具,可以详细看到计算 ...

  9. samba安装测试

    1.检查是否系统有自带的samba安装包 2.关闭防火墙 Iptables -F Systemctl disable firewalld Systemctl stop firewalld System ...

  10. 手把手教你学node.js之学习使用外部模块

    学习使用外部模块 目标 建立一个 lesson2 项目,在其中编写代码. 当在浏览器中访问 http://localhost:3000/?q=alsotang 时,输出 alsotang 的 md5 ...