hdu1978--How many ways(内存搜索)

How many ways

Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)

Total Submission(s): 3007    Accepted Submission(s): 1759

Problem Description

这是一个简单的生存游戏。你控制一个机器人从一个棋盘的起始点(1,1)走到棋盘的终点(n,m)。游戏的规则描写叙述例如以下:

1.机器人一開始在棋盘的起始点并有起始点所标有的能量。

2.机器人仅仅能向右或者向下走,而且每走一步消耗一单位能量。

3.机器人不能在原地停留。

4.当机器人选择了一条可行路径后,当他走到这条路径的终点时,他将仅仅有终点所标记的能量。

如上图。机器人一開始在(1,1)点,并拥有4单位能量。蓝色方块表示他所能到达的点,假设他在这次路径选择中选择的终点是(2,4)

点,当他到达(2,4)点时将拥有1单位的能量,并開始下一次路径选择。直到到达(6,6)点。

我们的问题是机器人有多少种方式从起点走到终点。这可能是一个非常大的数,输出的结果对10000取模。

Input

第一行输入一个整数T,表示数据的组数。

对于每一组数据第一行输入两个整数n,m(1 <= n,m <= 100)。表示棋盘的大小。

接下来输入n行,每行m个整数e(0 <= e < 20)。

Output

对于每一组数据输出方式总数对10000取模的结果.

Sample Input

1
6 6
4 5 6 6 4 3
2 2 3 1 7 2
1 1 4 6 2 7
5 8 4 3 9 5
7 6 6 2 1 5
3 1 1 3 7 2

Sample Output

3948

记忆化搜索,逆推着算。能够用到之前推出的结果。

opt[i][j] 计算从ij点到最后的方法

#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
int a[2][2] = { {1,0},{0,1} };
int opt[120][120] , Map[120][120] , n , m ;
void dp(int x,int y,int k)
{
    int i , j ;
    for(i = x ; i < n && i <= x+k ; i++)
    {
        for(j = y ; j < m && j <= y + ( k-(i-x) ) ; j++)
        {
            if( i == x && j == y ) continue ;
            opt[x][y] =  ( opt[x][y] + opt[i][j] ) % 10000 ;
        }
    }
}
int main()
{
    int t , i , j ;
    scanf("%d", &t);
    while(t--)
    {
        scanf("%d %d", &n, &m);
        for(i = 0 ; i < n ; i++)
            for(j = 0 ; j < m ; j++)
                scanf("%d", &Map[i][j]);
        memset(opt,0,sizeof(opt));
        opt[n-1][m-1] = 1 ;
        for(i = n-1 ; i >= 0 ; i--)
            for(j = m-1 ; j >= 0 ; j--)
            {
                if( i == n-1 && j == m-1 ) continue ;
                dp(i,j,Map[i][j]);
            }
        printf("%d\n", opt[0][0]);
    }
    return 0;
}
时间: 2024-12-13 11:08:24

hdu1978--How many ways(内存搜索)的相关文章

HDU1978:How many ways(记忆化)

Problem Description 这是一个简单的生存游戏,你控制一个机器人从一个棋盘的起始点(1,1)走到棋盘的终点(n,m).游戏的规则描述如下: 1.机器人一开始在棋盘的起始点并有起始点所标有的能量. 2.机器人只能向右或者向下走,并且每走一步消耗一单位能量. 3.机器人不能在原地停留. 4.当机器人选择了一条可行路径后,当他走到这条路径的终点时,他将只有终点所标记的能量. 如上图,机器人一开始在(1,1)点,并拥有4单位能量,蓝色方块表示他所能到达的点,如果他在这次路径选择中选择的终

HDU 4778 内存搜索&amp;amp;如压力

鉴于G宝石,B包.和S.S当代表凑齐每种颜色的宝石S我们可以成为哲学家的石头 每个软件包包含N宝石.分别c1,c2....... 然后他们轮流拿包.每个包可以得到一次.宝石出包放在地上. 假设你可以成为魔法石拿着魔法石,次还这个人拿包.没变成则换人. 魔法石的个数就是获得分数,问两人最优的时候分差是多少. 状压记忆化搜索 一共21个包.状压存当前取包的状态 不管如何取,最后获得的魔法石数量一定 dp[i]表示在i状态下.先手能够获得的最高分数 #include "stdio.h" #i

HDU1978 How many ways 【DP】

How many ways Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 3268    Accepted Submission(s): 1930 Problem Description 这是一个简单的生存游戏,你控制一个机器人从一个棋盘的起始点(1,1)走到棋盘的终点(n,m).游戏的规则描述如下: 1.机器人一开始在棋盘的起始点并

SDUT oj 3005 打怪升级(内存搜索)

当比赛一直纠缠骑2如何做一个非常大的数量,数组不开啊...后来他们发现自己很傻啊,该数不超过最大10什么,这个上限就是力量100什么.. .. 其它的就是记忆化搜索啊,还有就是加一点力量的瓶子当时就要用上. 打怪升级 Time Limit: 1000ms   Memory limit: 262144K  有疑问?点这里^_^ 题目描写叙述 对于多数 RPG 游戏来说,除了剧情就是打怪升级.本题的任务是用最短的时间取得全部战斗的胜利.这些战斗必须依照特定的顺序进行,每打赢一场.都可能会获得一些补药

Codeforces 39E What Has Dirichlet Got to Do with That? 游戏+内存搜索

主题链接:点击打开链接 意甲冠军: 特定 a一箱 b球 不变n (球和箱子都不尽相同,样的物品) 设 way = 把b个球放到a个箱子中的方法数, 若way >= n则游戏结束 有2个人玩游戏. 若当前轮到 X时 1. X选择添加一个箱子或添加一个球 2.若添加完后方法数>=n 则X失败 若先手必胜,则输出 Masha ,若先手必败则输出 Stas ,若为平局则输出 Missing 思路: 记忆化搜索 若当前给 a++ 或 b++都是会>=n 则当前局势必败 从当中不会>=n的局势

数字三角——递归、递归、内存搜索

数字三角 叙述性说明: 有一个非负整数三角,第一行中只有一个号码,的左下方和右下方各有一个数. 问题: 从第一行的数開始.每次能够往左下或右下走一格.直到走到最下行,把沿途经过的数所有加起来. 怎样走才干使得这个和尽量大? 分析: 不难看出此题是一个动态的决策问题:每次有两种选择--左下或右下. 假设用回溯法求出全部的可能的路线,就能够从中选出最优的路线.但和往常一样,回溯法的效率太低:一个n层数字三角形的完整路线有2^n条.当n非常大时回溯法的速度将让人无法忍受.因此本题讨论用递归,递推及记忆

hdu1978 How many ways

题目链接 Problem Description 这是一个简单的生存游戏,你控制一个机器人从一个棋盘的起始点(1,1)走到棋盘的终点(n,m).游戏的规则描述如下: 机器人一开始在棋盘的起始点并有起始点所标有的能量. 机器人只能向右或者向下走,并且每走一步消耗一单位能量. 机器人不能在原地停留. 当机器人选择了一条可行路径后,当他走到这条路径的终点时,他将只有终点所标记的能量. 如上图,机器人一开始在(1,1)点,并拥有4单位能量,蓝色方块表示他所能到达的点,如果他在这次路径选择中选择的终点是(

HDU1078 FatMouse and Cheese 【内存搜索】

FatMouse and Cheese Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 4966    Accepted Submission(s): 2035 Problem Description FatMouse has stored some cheese in a city. The city can be considere

POJ 1579-Function Run Fun(内存搜索)

Function Run Fun Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 16503   Accepted: 8514 Description We all love recursion! Don't we? Consider a three-parameter recursive function w(a, b, c): if a <= 0 or b <= 0 or c <= 0, then w(a, b