`
人生难得糊涂
  • 浏览: 117377 次
社区版块
存档分类
最新评论

POJ2506-分治法

 
阅读更多

 

与之解法相同的题 POJ1953,http://124654439.iteye.com/admin/blogs/2071845

题目大意:

有一个2*n大小的矩形地板,用2*2和2*1大小的瓷砖方块来填满它。

求一共有多少种放法。

分析:

如图,我们假设先放第一块方块,那么有以下两种放法
设n长度的瓷砖有f(n)块放法,

对于图中上面这种放法,f(n)=f(n-2)

显然中间的也是f(n)=f(n-2)

而下面的则是f(n)=f(n-1)

所以可以得到一个递归公式f(n)=f(n-1)+2*f(n-2).有了递推公式,很容易得到程序,但需要注意的是这道题的输出结果超出基本数据类型能表示的范围,所以需要使用大整数运算,所以这道题用JAVA编写方便一些,因为JAVA中有大整数类


 

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.math.BigInteger;

import com.sun.java_cup.internal.runtime.Scanner;


public class Main {
	
		
	
public static void main(String[] args) {
		//BigInteger n=new BigInteger("257");
		BigInteger[] f=new BigInteger[257];
		int n = 0;
		String s; 
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		//Scanner cin=new Scanner(System.in);
		try {
			int flag=1;
			s=br.readLine();
			while(s.compareTo("\n")!=0)
			{
				if(flag==0)
				s=br.readLine();
				
				n=Integer.parseInt(s);
				f[0]=new BigInteger("1");
				f[1]=new BigInteger("1");
				for(int i=2;i<=n;i++)
				{
					f[i]=f[i-1].add(f[i-2].multiply(new BigInteger("2")));
				}
				System.out.println(f[n]);
				flag=0;
			}
			
		} catch (NumberFormatException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
	}
}

 

 

  • 大小: 13.6 KB
分享到:
评论

相关推荐

    POJ2299-Ultra-QuickSort

    它的基本思想是采用分治法,通过选取一个基准元素,将待排序序列分为两部分,一部分的元素都比基准小,另一部分的元素都比基准大,然后再对这两部分进行快速排序。 【描述】"北大POJ2299-Ultra-QuickSort 解题报告+...

    POJ2389-Bull Math

    3. **算法设计**:这可能包括动态规划、贪心算法、回溯法、分治法等,具体取决于问题的特性。解题报告会详细解释选择这种算法的原因和优势。 4. **数据结构**:根据问题的复杂性,可能需要用到数组、链表、栈、队列...

    POJ 分类题目

    递归和分治法** - **定义**:递归是将问题分解成更小的问题重复解决;分治法则是在递归的基础上,将问题分割为两个或更多的子问题,独立解决后再合并结果。 - **示例题目**: - poj1164 - poj1941 - poj2282 - ...

    POJ1845-Sumdiv

    2. **算法设计**:解题者可能采用了动态规划、贪心算法、回溯法、分治法或其他适合的算法策略来解决问题。这可能需要巧妙地设计数据结构以优化计算效率。 3. **输入输出处理**:编程比赛中,通常需要从标准输入...

    POJ1390--blocks.rar

    3. **算法**:可能需要运用排序、搜索、动态规划、贪心算法、回溯法、分治法等经典算法。 4. **效率优化**:考虑时间复杂度和空间复杂度,优化算法以满足时间限制。 5. **代码规范**:提交的代码应遵循良好的编码...

    北大POJ初级-数学

    【北大POJ初级-数学】是北京大学在线编程平台(POJ)上针对初学者设置的一系列数学相关的编程题目。这个解题报告集包含了对这些题目的深入解析和已通过(AC,Accepted)的代码实现,旨在帮助学习者提升在算法和编程...

    POJ1000-1299中的80题AC代码

    2. **算法**:排序(冒泡、选择、插入、快速、归并等)、搜索(顺序、二分、深度优先、广度优先等)、动态规划(记忆化搜索、状态转移方程)、贪心算法、回溯法、分支限界法等。 3. **字符串处理**:KMP算法、Rabin...

    poj训练计划.doc

    - 分治法:将一个复杂的问题分成两个或更多的相同或相似的子问题,直到最后子问题可以简单的直接求解,如`poj3295`。 - 递推:利用已知的基础条件和递推关系式来求解问题,通常用于解决序列问题。 - 模拟法:按照...

    算法训练方案详解

    - **定义**: 递归是一种通过调用自身来解决问题的方法,而分治法则是将大问题分解成小问题解决。 - **应用场景**: 适用于可以分解为相似子问题的问题。 - **示例题目**: 通常这类题目没有特定的POJ编号,但可以...

    acm 分类 北大

    - 递归和分治:将问题分解为更小的部分,如POJ2586。 - 递推:利用已知的较小状态推导出较大状态,如POJ3295。 - 构造法:直接构建解决方案,如POJ3295。 - 模拟法:按照实际过程进行操作,如POJ1068和POJ2632。...

    POJ题目分类

    - **归并排序**:采用分治法的思想,递归地将数组分成两半,直到每个子数组只有一个元素,然后将子数组合并成一个有序数组。 - **堆排序**:利用堆这种数据结构所设计的一种排序算法,分为建堆和调整两个步骤。 #...

    POJ题目简单分类(ACM)

    - **模拟法**:按照题目描述的逻辑进行编程模拟,如poj1068、poj2632等。 2. **图算法**: - **深度优先遍历和广度优先遍历**:是图的基本操作,用于搜索图的所有节点。 - **最短路径算法**:包括dijkstra、...

    acm poj300题分层训练

    如poj1753、poj2965用于枚举训练,poj1328、poj2109、poj2586是贪心策略的实例,poj2506和poj3295涉及分治法,poj1068、poj2632等则用于模拟训练。 2. **图算法**:包括图的深度优先遍历、广度优先遍历、最短路径...

    POJ算法题目分类

    * 递归和分治法:递归和分治法是指将问题分解成多个小问题,通过解决小问题来解决大问题,如 poj3295。 * 递推:递推是指通过前一个结果来计算当前结果的方法,如 poj1068、poj2632、poj1573、poj2993、poj2996。 * ...

    poj题目分类

    * 递归和分治法:通过将问题拆分成小问题来解决,例如 poj3295。 * 递推法:通过逐步解决问题来获得最终解,例如 poj1068、poj2632、poj1573、poj2993、poj2996。 * 构造法:通过构造解来解决问题,例如 poj3295...

    ACM 经验 笔记 很有用的经验指导

    - **模拟法**:按照题目描述的过程进行操作,如 poj1068、poj2632 等。 2. **图算法**: - **深度优先遍历(DFS)** 和 **广度优先遍历(BFS)** 是图的基础操作,用于遍历节点。 - **最短路径算法**:包括 ...

    poj各种分类

    分治法是将大问题分解成若干个子问题,递归地求解这些子问题,然后将子问题的解合并为原问题的解。这种策略在poj3295这类构造法题目中尤为适用,同时也常见于递归和动态规划中。 #### 模拟法 模拟法是对题目场景的...

    很快速的提高算法能力.docx

    - **模拟法**:通过模拟实际过程来解决问题,如Poj1068、Poj2632、Poj1573、Poj2993和Poj2996。 2. **图算法** - **图遍历**:掌握深度优先搜索(DFS)和广度优先搜索(BFS),如Poj1860、Poj3259、Poj1062等。 ...

    poj-solve:算法练习

    递归和分治法 递推 构造法() 模拟法(,,,,) 图算法: 图的深度优先遍历和广度优先遍历 最短路径(dijkstra,bellman-ford,floyd,heap+dijkstra)(,,poj1062,poj2253,poj1125,poj2240) 最小生成树...

    poj解题报告(一百多道题)

    例如,动态规划中的“Fibonacci数列”和“背包问题”,贪心算法中的“活动安排问题”和“最小生成树”,回溯法中的“八皇后问题”和“N皇后问题”,以及分治法中的“快速排序”和“归并排序”。这些基础算法是解决...

Global site tag (gtag.js) - Google Analytics