与之解法相同的题 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(); } } }
相关推荐
它的基本思想是采用分治法,通过选取一个基准元素,将待排序序列分为两部分,一部分的元素都比基准小,另一部分的元素都比基准大,然后再对这两部分进行快速排序。 【描述】"北大POJ2299-Ultra-QuickSort 解题报告+...
3. **算法设计**:这可能包括动态规划、贪心算法、回溯法、分治法等,具体取决于问题的特性。解题报告会详细解释选择这种算法的原因和优势。 4. **数据结构**:根据问题的复杂性,可能需要用到数组、链表、栈、队列...
递归和分治法** - **定义**:递归是将问题分解成更小的问题重复解决;分治法则是在递归的基础上,将问题分割为两个或更多的子问题,独立解决后再合并结果。 - **示例题目**: - poj1164 - poj1941 - poj2282 - ...
2. **算法设计**:解题者可能采用了动态规划、贪心算法、回溯法、分治法或其他适合的算法策略来解决问题。这可能需要巧妙地设计数据结构以优化计算效率。 3. **输入输出处理**:编程比赛中,通常需要从标准输入...
3. **算法**:可能需要运用排序、搜索、动态规划、贪心算法、回溯法、分治法等经典算法。 4. **效率优化**:考虑时间复杂度和空间复杂度,优化算法以满足时间限制。 5. **代码规范**:提交的代码应遵循良好的编码...
【北大POJ初级-数学】是北京大学在线编程平台(POJ)上针对初学者设置的一系列数学相关的编程题目。这个解题报告集包含了对这些题目的深入解析和已通过(AC,Accepted)的代码实现,旨在帮助学习者提升在算法和编程...
2. **算法**:排序(冒泡、选择、插入、快速、归并等)、搜索(顺序、二分、深度优先、广度优先等)、动态规划(记忆化搜索、状态转移方程)、贪心算法、回溯法、分支限界法等。 3. **字符串处理**:KMP算法、Rabin...
- 分治法:将一个复杂的问题分成两个或更多的相同或相似的子问题,直到最后子问题可以简单的直接求解,如`poj3295`。 - 递推:利用已知的基础条件和递推关系式来求解问题,通常用于解决序列问题。 - 模拟法:按照...
- **定义**: 递归是一种通过调用自身来解决问题的方法,而分治法则是将大问题分解成小问题解决。 - **应用场景**: 适用于可以分解为相似子问题的问题。 - **示例题目**: 通常这类题目没有特定的POJ编号,但可以...
- 递归和分治:将问题分解为更小的部分,如POJ2586。 - 递推:利用已知的较小状态推导出较大状态,如POJ3295。 - 构造法:直接构建解决方案,如POJ3295。 - 模拟法:按照实际过程进行操作,如POJ1068和POJ2632。...
- **归并排序**:采用分治法的思想,递归地将数组分成两半,直到每个子数组只有一个元素,然后将子数组合并成一个有序数组。 - **堆排序**:利用堆这种数据结构所设计的一种排序算法,分为建堆和调整两个步骤。 #...
- **模拟法**:按照题目描述的逻辑进行编程模拟,如poj1068、poj2632等。 2. **图算法**: - **深度优先遍历和广度优先遍历**:是图的基本操作,用于搜索图的所有节点。 - **最短路径算法**:包括dijkstra、...
如poj1753、poj2965用于枚举训练,poj1328、poj2109、poj2586是贪心策略的实例,poj2506和poj3295涉及分治法,poj1068、poj2632等则用于模拟训练。 2. **图算法**:包括图的深度优先遍历、广度优先遍历、最短路径...
* 递归和分治法:递归和分治法是指将问题分解成多个小问题,通过解决小问题来解决大问题,如 poj3295。 * 递推:递推是指通过前一个结果来计算当前结果的方法,如 poj1068、poj2632、poj1573、poj2993、poj2996。 * ...
* 递归和分治法:通过将问题拆分成小问题来解决,例如 poj3295。 * 递推法:通过逐步解决问题来获得最终解,例如 poj1068、poj2632、poj1573、poj2993、poj2996。 * 构造法:通过构造解来解决问题,例如 poj3295...
- **模拟法**:按照题目描述的过程进行操作,如 poj1068、poj2632 等。 2. **图算法**: - **深度优先遍历(DFS)** 和 **广度优先遍历(BFS)** 是图的基础操作,用于遍历节点。 - **最短路径算法**:包括 ...
分治法是将大问题分解成若干个子问题,递归地求解这些子问题,然后将子问题的解合并为原问题的解。这种策略在poj3295这类构造法题目中尤为适用,同时也常见于递归和动态规划中。 #### 模拟法 模拟法是对题目场景的...
- **模拟法**:通过模拟实际过程来解决问题,如Poj1068、Poj2632、Poj1573、Poj2993和Poj2996。 2. **图算法** - **图遍历**:掌握深度优先搜索(DFS)和广度优先搜索(BFS),如Poj1860、Poj3259、Poj1062等。 ...
递归和分治法 递推 构造法() 模拟法(,,,,) 图算法: 图的深度优先遍历和广度优先遍历 最短路径(dijkstra,bellman-ford,floyd,heap+dijkstra)(,,poj1062,poj2253,poj1125,poj2240) 最小生成树...
例如,动态规划中的“Fibonacci数列”和“背包问题”,贪心算法中的“活动安排问题”和“最小生成树”,回溯法中的“八皇后问题”和“N皇后问题”,以及分治法中的“快速排序”和“归并排序”。这些基础算法是解决...