题意:

小兔的棋盘

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

Problem Description
小兔的叔叔从外面旅游回来给她带来了一个礼物,小兔高兴地跑回自己的房间,拆开一看是一个棋盘,小兔有所失望。不过没过几天发现了棋盘的好玩之处。从起点(0,0)走到终点(n,n)的最短路径数是C(2n,n),现在小兔又想如果不穿越对角线(但可接触对角线上的格点),这样的路径数有多少?小兔想了很长时间都没想出来,现在想请你帮助小兔解决这个问题,对于你来说应该不难吧!
Input
每次输入一个数n(1<=n<=35),当n等于-1时结束输入。
Output
对于每个输入数据输出路径数,具体格式看Sample。
Sample Input
1 3 12 -1
Sample Output
1 1 2 2 3 10 3 12 416024


思路:
       简单dp, 因为是求最短,所以当前状态只能由上面或者左面过来(上半部分三角形),由于不能过对角线,我们可以只求一半,也就是上面三角形,最后乘2就行了,直接dp打表,或者记忆化搜索,对于记忆化搜索也可以1边记忆化搜索打表,就是最后在转换矩阵,终点变成了起点,起点变终点什么的,不难,我下面的是dp打表,和直接记忆化搜索的代码,记忆化搜索打表的没写,想写的直接在记忆或搜索的那个改改就行了。


dp

#include<stdio.h>
#include<string.h>

__int64 dp[40][40] = {0};void solve(int n)
{dp[1][1] = 1;for(int i = 1 ;i <= n ;i ++)for(int j = i ;j <= n ;j ++){  if(i == 1 && j == 1) continue;dp[i][j] = dp[i][j-1] + dp[i-1][j];}
}int main ()
{int n ,cas = 1;solve(36);while(~scanf("%d" ,&n) && n != -1){printf("%d %d %I64d\n" ,cas ++ ,n ,dp[n+1][n+1] * 2);}return 0;
}

记忆化搜索


#include<stdio.h>
#include<string.h>

int mark[40][40];
__int64 dp[40][40];
int n;__int64 DFS(int x ,int y)
{if(x == n + 1 && y == n + 1) return 1;if(mark[x][y]) return dp[x][y];__int64 sum = 0;if(x + 1 <= n + 1 && x + 1 <= y)sum += DFS(x + 1 ,y);if(y + 1 <= n + 1)sum += DFS(x ,y + 1);mark[x][y] = 1;dp[x][y] = sum;return sum;
}int main ()
{memset(mark ,0 ,sizeof(mark));int cas = 1;while(scanf("%d" ,&n) && n != -1){memset(mark ,0 ,sizeof(mark));printf("%d %d %I64d\n" ,cas ++ ,n ,DFS(1 ,1) * 2);}return 0;
}

hdu2067 简单dp或者记忆化搜索相关推荐

  1. PAT甲级1106 Lowest Price in Supply Chain:[C++题解]树、结点到根结点的距离、树形dp、记忆化搜索

    文章目录 题目分析 题目链接 题目分析 来源:acwing 分析:这道题是第三次做了. 和PAT甲级1079 Total Sales of Supply Chain:[C++题解] 树.结点到根结点的 ...

  2. 蓝桥杯历届试题 地宫取宝 dp or 记忆化搜索

    问题描述 X 国王有一个地宫宝库.是 n x m 个格子的矩阵.每个格子放一件宝贝.每个宝贝贴着价值标签. 地宫的入口在左上角,出口在右下角. 小明被带到地宫的入口,国王要求他只能向右或向下行走. 走 ...

  3. 51Nod-1284 2 3 5 7的倍数【数位DP+记忆化搜索】

    1284 2 3 5 7的倍数  给出一个数N,求1至N中,有多少个数不是2 3 5 7的倍数. 例如N = 10,只有1不是2 3 5 7的倍数. Input 输入1个数N(1 <= N &l ...

  4. 51Nod-1009 数字1的数量【数位DP+记忆化搜索】

    1009 数字1的数量  给定一个十进制正整数N,写下从1开始,到N的所有正数,计算出其中出现所有1的个数. 例如:n = 12,包含了5个1.1,10,12共包含3个1,11包含2个1,总共5个1. ...

  5. 【AcWing】数位统计DP、树形DP、状态压缩DP、记忆化搜索

    [AcWing]数位统计DP.树形DP.状态压缩DP.记忆化搜索 一.数位统计DP 二.状态压缩DP 三.树形DP 四.记忆化搜索 一.数位统计DP 计数问题 给定两个整数 a 和 b,求 a 和 b ...

  6. UVA437 巴比伦塔 The Tower of Babylon(矩形嵌套进阶版、DAG上DP、记忆化搜索)

    整理的算法模板合集: ACM模板 本题和基础的矩形覆盖差不多,只不过变成了三维的长方形. 因为每次转移的时候只有顶面的x和y会影响决策的进行,所以我们只需要用一个二元组(a,b)(a, b)(a,b) ...

  7. PAT甲级1079 Total Sales of Supply Chain:[C++题解] 树、结点到根结点的距离、树形dp、记忆化搜索

    文章目录 题目分析 题目链接 题目分析 来源:acwing 分析:下图是对样例的模拟图示,题目就是统计叶子结点卖出去的钱数.根据下图,我们第一步是建树,第二步是统计叶子结点到根结点的距离,然后才能知道 ...

  8. HDU2089 不要62【数位DP+记忆化搜索】

    不要62 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submi ...

  9. Discovering Gold LightOJ - 1030[概率dp或者记忆化搜索]

    题目大意:有一个[1,n][1,n][1,n]的数轴,数轴上的每个对应位置上都有金矿,你初始位置是1,然后你每次都会投色子决定你下一步跳到哪里,如果你跳出了nnn,那么你就要重新投.问你跳到nnn的时 ...

最新文章

  1. APUE(第八章)进程控制
  2. Linux宏定义屏蔽打印信息,宏定义实现调试信息的打印
  3. Linux按照CPU、内存、磁盘IO、网络性能监测
  4. java简单文本编译器_java -简易文本编辑器
  5. 去小公司了解哪些工具?
  6. mcq 队列_MCQ | 量子密码学
  7. MySQL笔记-InnoDB物理及逻辑存储结构
  8. ZeroTier内网穿透工具配置
  9. [C#]启动外部程序
  10. PAT 1031 查验身份证
  11. vcenter服务器修改ip,vcSA修改IP或hostname
  12. 基于SOA的设备智能维护系统架构设计及实现
  13. Ubuntu重装NVIDIA显卡驱动
  14. 中小水库中的水情遥测系统如何实现远程监控和自动报警?
  15. rhel7 pcs pacemaker corosync配置主从高可用
  16. synergy服务器未响应,请问synergy启动不了怎么回事???
  17. http://www.dewen.net.cn/q/15800/php如何生成十进制00到20之间的2位随机数
  18. 生化危机2重制版 小笔记
  19. BeautfulSoup详解
  20. 如何取消小程序中的云开发模式

热门文章

  1. Elasticsearch学习笔记-05浏览数据
  2. 写自己的一个pdo数据库操作框架
  3. 快速创建 IEqualityComparerT 和 IComparerT 的实例
  4. 绝对Linux服务器管理利器webmin
  5. FTP之‘基础连接已关闭:服务器提交了协议冲突’错误探析
  6. 获取系统昨日最高峰时的AWR报告,get_hight_load_awr
  7. 怎样把SharePoint中文备份恢复到英文版,修改sharepoint站点语言
  8. Spring in Action 入门之面向切面编程AOP
  9. 【P2766】 最长不下降子序列问题
  10. thinkcmf安装模板需要点击右键打开新页面的解决办法