(动态规划)Worm -- hdu -- 2151

http://acm.hdu.edu.cn/showproblem.php?pid=2151

Worm

Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 3403    Accepted Submission(s): 2194

Problem Description

自从见识了平安夜苹果的涨价后,Lele就在他家门口水平种了一排苹果树,共有N棵。

突然Lele发现在左起第P棵树上(从1开始计数)有一条毛毛虫。为了看到毛毛虫变蝴蝶的过程,Lele在苹果树旁观察了很久。虽然没有看到蝴蝶,但Lele发现了一个规律:每过1分钟,毛毛虫会随机从一棵树爬到相邻的一棵树上。

比如刚开始毛毛虫在第2棵树上,过1分钟后,毛毛虫可能会在第1棵树上或者第3棵树上。如果刚开始时毛毛虫在第1棵树上,过1分钟以后,毛毛虫一定会在第2棵树上。

现在告诉你苹果树的数目N,以及毛毛刚开始所在的位置P,请问,在M分钟后,毛毛虫到达第T棵树,一共有多少种行走方案数。

Input

本题目包含多组测试,请处理到文件结束(EOF)。
每组测试占一行,包括四个正整数N,P,M,T(含义见题目描述,0<N,P,M,T<100)

Output

对于每组数据,在一行里输出一共的方案数。
题目数据保证答案小于10^9

Sample Input

3 2 4 2

3 2 3 2

Sample Output

4

0

Hint

第一组测试中有以下四种走法:

2->1->2->1->2

2->1->2->3->2

2->3->2->1->2

2->3->2->3->2

#include<stdio.h>
#include<string.h>
#define max(a,b) (a>b?a:b)
#define N 1100

int dp[N][N];

int main()
{
    int n, P, M, T;

    while(scanf("%d%d%d%d", &n, &P, &M, &T)!=EOF)
    {
        int i, j;

        memset(dp, 0, sizeof(dp));

        dp[0][P] = 1;

        for(i=1; i<=M; i++)
        for(j=1; j<=n; j++)
        {
            dp[i][j] = dp[i-1][j-1] + dp[i-1][j+1];
        }

        printf("%d\n", dp[M][T]);
    }
    return 0;
}
时间: 2024-10-25 15:18:52

(动态规划)Worm -- hdu -- 2151的相关文章

hdu 2151 Worm (DP)

Worm Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 2637    Accepted Submission(s): 1707 Problem Description 自从见识了平安夜苹果的涨价后,Lele就在他家门口水平种了一排苹果树,共有N棵.突然Lele发现在左起第P棵树上(从1开始计数)有一条毛毛虫.为了看到毛毛虫变蝴蝶的过程

HDU 2151 Worm

Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 3875    Accepted Submission(s): 2503 Problem Description 自从见识了平安夜苹果的涨价后,Lele就在他家门口水平种了一排苹果树,共有N棵. 突然Lele发现在左起第P棵树上(从1开始计数)有一条毛毛虫.为了看到毛毛虫变蝴蝶的过程,Lel

【动态规划】HDU 5492 Find a path (2015 ACM/ICPC Asia Regional Hefei Online)

题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5492 题目大意: 一个N*M的矩阵,一个人从(1,1)走到(N,M),每次只能向下或向右走.求(N+M-1)ΣN+M-1(Ai-Aavg)2最小.Aavg为平均值. (N,M<=30,矩阵里的元素0<=C<=30) 题目思路: [动态规划] 首先化简式子,得原式=(N+M-1)ΣN+M-1(Ai2)-(ΣN+M-1Ai)2 f[i][j][k]表示走到A[i][j]格子上,此时前i+j-1

【动态规划】HDU 5791 Two

题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5791 题目大意: A,B两个数列,问A的子集和B的子集相等的子集对数.子集内顺序按照数列顺序,相同的数字视为不同. 题目思路: [动态规划] f[i][j]表示A前i个数,B前j个数且第j个数必取的值.g[i][j]表示j不一定必取得值. ans=∑f[n][j]. 1 // 2 //by coolxxx 3 //#include<bits/stdc++.h> 4 #include<ios

【动态规划】HDU 5781 ATM Mechine

题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5781 题目大意: 一个人有[0,K]内随机的钱,每次可以随意取,但是不知道什么时候取完,取钱超过剩余额度会警告一次,最多警告不能超过W.求期望取出钱的次数. 题目思路: [动态规划] 二分居然错了...看来二分出的答案不一定最优..起码第三个样例过不去. f[i][j]表示钱在[0,i]区间内,警告次数不超过j的期望取钱次数.那么取一次钱k相当于把钱分成两块,[0,k]和[k+1,i],即[0,k

【动态规划】HDU 1081 &amp; XMU 1031 To the Max

题目链接: http://acm.xmu.edu.cn/JudgeOnline/problem.php?id=1031 题目大意: 给一个n*n(n<=100)的矩阵,求一个矩形覆盖的值最大是多少. 题目思路: [动态规划] 二维的最大字段和.先考虑一维的情况.f[i]=max(f[i-1]+a[i],a[i]) 只要之前的部分和大于零则一起取一定比只取当前位置的要优. 因此只要判断局部段的和是否大于零.同时每多取一个数就要更新答案. 之后只要将一维扩展到二维就行.枚举行的始末位置. 1 //

hdu 2151

就是一个dp,数组内存的步数, 数组没清空,wa了一次 #include<cstdio> #include<algorithm> #include<cstring> using namespace std; int step[110][110]; int main() { int N,P,M,T; while(scanf("%d%d%d%d",&N,&P,&M,&T)!=EOF){ memset(step,0,size

动态规划:HDU 1114 Piggy-Bank

Problem Description Before ACM can do anything, a budget must be prepared and the necessary financial support obtained. The main income for this action comes from Irreversibly Bound Money (IBM). The idea behind is simple. Whenever some ACM member has

动态规划解决hdu龟兔赛跑

import java.util.Scanner; class test { private double dp[];//用来存储每段的最短时间 private double p[];//用来存储每个充电站点离起点的距离 private int n,c,t; private double vr,vt1,vt2; private double Length; public boolean Solution(){ System.out.print("请输入每个站点离起点的距离:"); Sc