Acdream 1667 调皮的数一 (ACdreamer java 专场)
2015-09-23 00:32
537 查看
【题目链接】:click here~~
【题目大意】:
数一很喜欢跑步~喜欢追逐风的脚步~
但是数一永远改不了贪玩调皮的个性,他在跑步的时候经常跑到别的跑道上。假设数一在跑一条直线跑道,从左往右是1号跑道,2号跑道,3号跑道......如此类推,并且为了让数一同学更自由,总共有无限条跑道!数一需要跑n步才能到达终点,但是正如上面所说的,他每跑一步要么仍然在原跑道,要么蹿到相邻的跑道,当然数一是不会跑到1号跑道之外的,因为这是违背数一原则的!数一,顾名思义,肯定是从1号跑道开始跑步,同样的,最后必须回到1号跑道到达终点。那么请问数一有多少种方案来跑完这n步呢?(两种方案视为不同当且仅当两种方案的某一步所在的跑道不同)
多组数据,每组数据一个整数n(n≤1000)
对于每组数据,输出一个整数,表示满足题意的方案数。
n=2时,数一可以有1-2-1或者1-1-1两种方案
n=3时,数一可以有1-2-1-1或者1-1-2-1或者1-2-2-1或者1-1-1-1四种方案
【思路】很容易想到每步方案是有前三个状态推过来,即左边跑道,当前跑道,右边跑道,写成dp就是:
代码:
【题目大意】:
Problem Description
数一很喜欢跑步~喜欢追逐风的脚步~但是数一永远改不了贪玩调皮的个性,他在跑步的时候经常跑到别的跑道上。假设数一在跑一条直线跑道,从左往右是1号跑道,2号跑道,3号跑道......如此类推,并且为了让数一同学更自由,总共有无限条跑道!数一需要跑n步才能到达终点,但是正如上面所说的,他每跑一步要么仍然在原跑道,要么蹿到相邻的跑道,当然数一是不会跑到1号跑道之外的,因为这是违背数一原则的!数一,顾名思义,肯定是从1号跑道开始跑步,同样的,最后必须回到1号跑道到达终点。那么请问数一有多少种方案来跑完这n步呢?(两种方案视为不同当且仅当两种方案的某一步所在的跑道不同)
Input
多组数据,每组数据一个整数n(n≤1000)
Output
对于每组数据,输出一个整数,表示满足题意的方案数。
Sample Input
2 3 5
Sample Output
2 4 21
Hint
n=2时,数一可以有1-2-1或者1-1-1两种方案n=3时,数一可以有1-2-1-1或者1-1-2-1或者1-2-2-1或者1-1-1-1四种方案
【思路】很容易想到每步方案是有前三个状态推过来,即左边跑道,当前跑道,右边跑道,写成dp就是:
dp[i][j] = dp[i - 1][j + 1].add(dp[i - 1][j].add(dp[i - 1][j - 1]));DP[i][j]:表示跑到j跑道跑了i步的方案数。
代码:
/*
* this code is made by herongwei
* Problem: 1667
* Verdict: Accepted
* Submission Date: 2015-09-22 19:51:08
* Time: 992MS
* Memory: 240620KB
*/
//package ac0901;
import java.util.*;
import java.io.*;
import java.math.*;
public class Main
{
public static void main(String args[])
{
Scanner cin = new Scanner(new BufferedInputStream(System.in));
//int t = cin.nextInt();
BigInteger dp[][] = new BigInteger[1101][1101];
for(int i=0; i<1100; ++i)
{
for(int j=0; j<1100; ++j)
{
dp[i][j]=BigInteger.ZERO;
}
}
dp[0][0]=BigInteger.ONE;
int n;
for(int i=1; i<=1001; ++i)
{
for(int j=1; j<=1001; ++j)
{
dp[i][j] = dp[i - 1][j + 1].add(dp[i - 1][j].add(dp[i - 1][j - 1]));
}
}
while(cin.hasNext())
{
n=cin.nextInt();
System.out.println(dp[n+1][1]);
}
}
}
相关文章推荐
- Spring学习日记(3)建立bean工场实现Dao层
- java反射机制浅析
- java 面对象的思想
- java的HashMap与ConcurrentHashMap
- spring的学习历程之利用MessageSource实现国际化占位符直接输出原因(一)
- JAVA基础学习(十四)--集合一List和HashSet
- ODL openflowjava和openflowplugin的启动流程,代码详解。
- 使用Spring Mail发送QQ邮件
- Java正则表达式基础入门知识
- Java正则表达式使用
- 打造高性能Java应用需掌握的5大知识
- Spring IOC容器基本原理
- java-邮件发送-mail.jar
- Spring4.1.1.RELEASE和quartz2.1.7整合
- Spring 4.2 方法注入解决单例Bean的原型Bean依赖问题
- AKKA文档(java版)—角色
- Java在生活有哪些应用?
- Java内存管理器
- JAVA 虚函数 抽象函数 抽象类 接口
- SpringMVC常见错误处理