题面来源:geeksforgeeks/1993

题解:geeksforgeeks

题目简述:给一个m*n的矩阵,计算从(1,1)到(m,n)的所有不回退路径中,经过k次转向后的路径有多少条

     输入T个样例,每个样例三个数据,依次是m,n,k。

     输出路径条数。

给个题解中的图解:

  

测试数据:

Sample Input

3
2 2 3
2 3 1
4 4 4

Sample Output

2
2
18

已经贴了题面来源就暂时不贴全部的题目了,偶然发现了这道DP,貌似是FB的面试题,是道非常好的题目。

测试代码如下(建议尝试一次):

 #include<iostream>
using namespace std; #define MAX 100 //dp[i][j][k][d]
//从(0,0)->(i,j)经过k次转向,且上一次经过d的总路径
//d = 0: 横; d=1: 竖
int dp[MAX][MAX][MAX][]; int countPathsUtil(int i, int j, int k, int d)
{
if (i < || j < )
return ; if (i == && j == ) //到达原点
return ; if (k == )
{
if (d == && i == ) return ; //到左侧边,且为竖向
if (d == && j == ) return ; //到顶侧边,且为横向
return ;
} //记忆化
if (dp[i][j][k][d] != -)
return dp[i][j][k][d]; if (d == ) //若横向走
return dp[i][j][k][d] = countPathsUtil(i, j - , k, d) + //继续横向
countPathsUtil(i - , j, k - , !d); //转向
//竖向同理
return dp[i][j][k][d] = countPathsUtil(i - , j, k, d) + //继续竖向
countPathsUtil(i, j - , k - , !d); //转向
} int countPaths(int i, int j, int k)
{
if (i == && j == )
return ;
memset(dp, -, sizeof dp); return countPathsUtil(i - , j, k, ) + // 减治到上格
countPathsUtil(i, j - , k, ); // 减治到左格
} int main()
{
int m = , n = , k = ;
cout << countPaths(m - , n - , k) << endl;
return ;
}

= 。=

ACM/ICPC 之 一道不太简单的DP面试题(Geeksforgeeks)的更多相关文章

  1. ACM/ICPC 之 最短路-Floyd+SPFA(BFS)+DP(ZOJ1232)

    这是一道非常好的题目,融合了很多知识点. ZOJ1232-Adventrue of Super Mario 这一题折磨我挺长时间的,不过最后做出来非常开心啊,哇咔咔咔 题意就不累述了,注释有写,难点在 ...

  2. 2013 ACM/ICPC Asia Regional Changsha Online - G(DP)

    第一眼就想到DP,然后想了N久就想不到可以不重算的DP  最后没办法了 先算出来 再去重.. 因为最多只有三个 对于三个来说有三种组合情况 x+y+z, x*y*z, x*y+z 那要么 x,y,z都 ...

  3. 【转】lonekight@xmu·ACM/ICPC 回忆录

    转自:http://hi.baidu.com/ordeder/item/2a342a7fe7cb9e336dc37c89 2009年09月06日 星期日 21:55 初识ACM最早听说ACM/ICPC ...

  4. 【转】ACM/ICPC生涯总结暨退役宣言—alpc55

    转自:http://hi.baidu.com/accplaystation/item/ca4c2ec565fa0b7fced4f811 ACM/ICPC生涯总结暨退役宣言—alpc55 前言 早就该写 ...

  5. 2015 ACM/ICPC Asia Regional Changchun Online HDU 5444 Elven Postman【二叉排序树的建树和遍历查找】

    Elven Postman Time Limit: 1500/1000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others)T ...

  6. 2017 ACM/ICPC Asia Regional Qingdao Online

    Apple Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others)Total Submi ...

  7. 2014嘉杰信息杯ACM/ICPC湖南程序设计邀请赛暨第六届湘潭市程序设计竞赛

    比赛链接: http://202.197.224.59/OnlineJudge2/index.php/Contest/problems/contest_id/36 题目来源: 2014嘉杰信息杯ACM ...

  8. hduoj 4712 Hamming Distance 2013 ACM/ICPC Asia Regional Online —— Warmup

    http://acm.hdu.edu.cn/showproblem.php?pid=4712 Hamming Distance Time Limit: 6000/3000 MS (Java/Other ...

  9. ACM - ICPC World Finals 2013 C Surely You Congest

    原题下载:http://icpc.baylor.edu/download/worldfinals/problems/icpc2013.pdf 题目翻译: 试题来源 ACM/ICPC World Fin ...

随机推荐

  1. 【8-23】node.js学习笔记

    Node入门 //请求(require)Node.js自带的 http 模块,并且把它赋值给 http 变量 //变成了一个拥有所有 http 模块所提供的公共方法的对象 var http = req ...

  2. java.lang.reflect.Method

    java.lang.reflect.Method 一.Method类是什么 Method是一个类,位于java.lang.reflect包下. 在Java反射中 Method类描述的是 类的方法信息, ...

  3. seo与sem的关系和区别

    seo与sem仅有一个字母之差,而且两者和网站优化都有很大的关系,很多初学者往往会把这2个名称弄混,即使一些做了多年的seo,有时候也无法区分这两者之间到底有何不同. 首先,我们从定义上来区分:SEO ...

  4. VBA 表格操作2 表格复制

    office excel文件有工作簿,里面存放一张张表,表的名字叫做标签名,簿名就是我们常见的的文件名,簿的类型有"一簿一表"与"一簿多表". 完成将多张表合并 ...

  5. java 在接口里函数不能重载?

    项目里使用hession远程调用serviceRemote接口,而serviceRemote接口里有两个save方法,参数分别是CpCredential对象和List,但运行发现会报莫名其妙的错. 后 ...

  6. 【C语言入门教程】3.1 程序的 3 种基本结构

    程序设计是一个问题求解的过程,解决问题的步骤可看作是程序的控制结构.简单地说,程序的运行过程就是数据输入.数据处理.数据输出 3 个步骤.其中,数据处理过程是否快捷和准确,主要依赖于程序控制结构的设计 ...

  7. ini文件操作

    Config.ini 文件操作 [SYS] sysname=hy company=hyhy tel=2 using System; using System.Collections.Generic; ...

  8. Java多线程基础知识(三)

    一. 管道输入/输出流 它和其它文件输入/输出流或网络输入/输出流的不同之处,它主要是线程之间的数据传输,而传输的媒介是内存. 管道输入/输出流主要包含四中实现: 1. PipedOutputStre ...

  9. BZOJ1251——序列终结者

    给你一个数列,让你实现区间加上一个值,区间翻转,区间最大值 裸splay,懒标记一发即可 #include <cstdio> #include <cstdlib> #inclu ...

  10. wor20161202

    http://wenku.baidu.com/link?url=tWdw-Kgn_Ncr52ooBSL2J0y_ZJy3SvAXGv9Lu5UOKB333frE48hmkQ_5Pj9CJeCtGm7_ ...