poj 2506 Tiling dp 递推
来源:互联网 发布:数据交换平台技术规范 编辑:程序博客网 时间:2024/04/29 21:58
我是有用dp做的,做完之后看网上大多人都是推出公式,反正我是没看出来
dp[i][j],i表示第i列放入一竖条,j表示放入的竖条是什么形状,j一共有5种情况,dp就表示这个i表示第i列放入一个j类型竖条有几种摆放方法
如图 0~4表示j的五种状态
然后就有递推公式
dp[i][0]=dp[i-1][0]+dp[i-1][3]+dp[i-1][4]
dp[i][1]=dp[i-1][0]+dp[i-1][3]+dp[i-1][4]
dp[i][2]=dp[i-1][0]+dp[i-1][3]+dp[i-1][4]
dp[i][3]=dp[i-1][1]
dp[i][4]=dp[i-1][2]
最后dp[i][0]+dp[i][3]+dp[i][4]就是答案
代码如下
对了其中还有一个好囧的事,就是没完全初始化,eclipse就是编译不了 唉!!!
import java.util.*;import java.math.*;public class Main{public static void main(String[] args){Scanner scan=new Scanner(System.in);BigDecimal[][] dp= new BigDecimal [320][10];dp[0][0]=new BigDecimal (1);dp[1][0]=new BigDecimal (1); dp[1][1]=new BigDecimal (1); dp[1][2]=new BigDecimal (1); dp[1][3]=new BigDecimal (0); dp[1][4]=new BigDecimal (0); dp[0][1]=new BigDecimal (0); dp[0][2]=new BigDecimal (0); dp[0][3]=new BigDecimal (0); dp[0][4]=new BigDecimal (0); for(int i=2;i<=300;i++){ dp[i][0]=dp[i-1][4].add(dp[i-1][0].add(dp[i-1][3])); dp[i][1]=dp[i-1][4].add(dp[i-1][0].add(dp[i-1][3])); dp[i][2]=dp[i-1][4].add(dp[i-1][0].add(dp[i-1][3])); dp[i][3]=dp[i-1][1]; dp[i][4]=dp[i-1][2]; }while(scan.hasNext()){int in=scan.nextInt();System.out.println(dp[in][0].add(dp[in][3].add(dp[in][4])));}}}
- poj 2506 Tiling dp 递推
- POJ 2506 Tiling 递推
- poj - 2506 Tiling--递推
- Poj 2506 Tiling (Java高精度 + 递推)
- POJ 2506 Tiling ( 递推 + 大数 )
- POJ 2506 Tiling 递推+大数
- POJ 2506-Tiling(递推+大数)
- POJ 2506 Tiling(高精度+递推)
- POJ 2506 Tiling -递推大数
- POJ 2506 Tiling (递推+高精度)
- poj 2506 Tiling【大数+递推】
- 【POJ】2506 - Tiling(递推,高精度)
- poj 2506 Tiling 《大数加法+递推》
- poj 2506 Tiling(大数+递推)
- POJ 2506 Tiling (大数+递推)
- POJ-2506-Tiling [递推][大数]
- [POJ](2506)Tiling ---递推+Java大数
- POJ 3420 Quad Tiling DP?递推?+矩阵快速幂
- 生成C风格ActiveX控件头文件的方法
- hdu 1864 最大报销额 01背包 解法
- Android AppWidget实例验证
- CPU 风扇清理灰尘加油全过程图解
- Linux平台Makefile文件的编写基础篇
- poj 2506 Tiling dp 递推
- 跟着微软走,不会MVC,你OUT了 .
- Clode nine
- CPU 风扇清理灰尘加油全过程图解
- C控制串口
- 数据库事务的原理
- 最短的,用上JS所有关键字代码
- 实现客户端与服务器的交互
- 常用WEB框架Struts1、Struts2和Spring MVC大PK(二)(转)