递归--练习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. 【php】---mysql---基本操作及使用---【巷子】

    1.数据库简介 (1).什么是数据库?     一个文件  一个文件夹  一个u盘   一个硬盘......都叫做数据库    存放数据的仓库   (2).常见的数据库?     mySql  sql ...

  2. [ASP.NET 大牛之路]02 - C#高级知识点概要(1) - 委托和事件

    在ASP.NET MVC 小牛之路系列中,前面用了一篇文章提了一下C#的一些知识点.照此,ASP.NET MVC 大牛之路系列也先给大家普及一下C#.NET中的高级知识点.每个知识点不太会过于详细,但 ...

  3. CH1402 后缀数组【Hash】【字符串】【二分】

    1402 后缀数组 0x10「基本数据结构」例题 描述 后缀数组 (SA) 是一种重要的数据结构,通常使用倍增或者DC3算法实现,这超出了我们的讨论范围.在本题中,我们希望使用快排.Hash与二分实现 ...

  4. ubuntu16.04下笔记本自带摄像头编译运行PTAM

    ubuntu16.04下笔记本自带摄像头编译运行PTAM 转载请注明链接:https://i.cnblogs.com/EditPosts.aspx?postid=9014147 个人邮箱:feifan ...

  5. 向Docx4j生成的word文档添加图片和布局--第一部分

    原文标题:Adding images and layout to your Docx4j-generated word documents, part 1 原文链接:http://blog.iprof ...

  6. flight framework 核心解读

    http://blog.csdn.net/sky_zhe/article/details/38906689?utm_source=tuicool&utm_medium=referral

  7. django-session和cookie

    在Django里面,使用Cookie和Session看起来好像是一样的,使用的方式都是request.COOKIES[XXX]和request.session[XXX],其中XXX是您想要取得的东西的 ...

  8. 使用celery之了解celery(转)

    原文  http://www.dongwm.com/archives/shi-yong-celeryzhi-liao-jie-celery/   前言 我想很多做开发和运维的都会涉及一件事:cront ...

  9. mysql创建和删除表

    创建表 简单的方式 CREATE TABLE person ( ), name ), birthday DATE ); 或者是 CREATE TABLE IF NOT EXISTS person ( ...

  10. samba文件共享服务配置(multiuser机制)二 (共两节)

    smb客户端的multiuser挂载技术 --管理员只需要作一次挂载 --客户端在访问挂载点时,若需要不同权限,可临时切换新的共享用户[无需重新挂载] 实现方式 --挂载smb共享时启用multius ...