热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

HDU2067动态规划与卡特兰数的应用分析

题目描述:小兔的叔叔从外地旅行归来,给她带回了一份礼物。小兔兴奋地回到自己的房间,迫不及待地拆开礼物,发现是一副棋盘,虽然有些失望,但很快她便对这个新奇的物品产生了浓厚的兴趣。本文将通过动态规划和卡特兰数的应用,详细分析该问题的求解方法,并探讨其背后的数学原理。

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

Input
每次输入一个数n(1<&#61;n<&#61;35)&#xff0c;当n等于&#xff0d;1时结束输入。

Output
对于每个输入数据输出路径数&#xff0c;具体格式看Sample。

Sample Input
1
3
12
-1

Sample Output
1 1 2
2 3 10
3 12 416024


DP题解&#xff1a;

参考http://blog.sina.com.cn/s/blog_a16dd6d101014q6x.html
假设是8*8的矩阵
这里写图片描述
箭头方向表示从该格子下一步能去的格子。因为不能穿越对角线&#xff0c;所有对角线上的格子只有进去的箭头&#xff0c;没有出来的箭头。
不难推出状态转移方程
if(i&#61;&#61;j)
dp[i][j]&#61;dp[i][j-1]
else
dp[i][j]&#61;dp[i-1][j]&#43;dp[i][j-1]
我们只需要求对角线一半的路径数&#xff0c;因为它是关于对角线对称的&#xff0c;不难发现0列0行的路径数是1&#xff0c;注意初始化


代码&#xff1a;

#include
#include
#include
using namespace std;
typedef long long LL;
LL f[45][45];int main()
{for(int i&#61;0;i<40;i&#43;&#43;)f[i][0]&#61;1;for(int i&#61;0;i<40;i&#43;&#43;){for(int j&#61;1;j<40;j&#43;&#43;){if(i&#61;&#61;j)f[i][j]&#61;f[i][j-1];elsef[i][j]&#61;f[i][j-1]&#43;f[i-1][j];}}int n;int ks&#61;1;while(cin>>n&&n!&#61;-1){//cout<printf("%d %d %lld\n",ks&#43;&#43;,n,2*f[n][n]);}return 0;
}

题解&#xff1a;

参考http://blog.csdn.net/hackbuteer1/article/details/7450250
此题属于卡特兰数列经典之一


代码&#xff1a;

#include
using namespace std;
int main(){long long Cata[40];Cata[0]&#61;Cata[1]&#61;1;for(int i&#61;2;i<&#61;35;i&#43;&#43;){for(int j&#61;0;j*Cata[i-j-1];}// printf("%lld\n",Cata[i]);}int kase&#61;0,n;while(scanf("%d",&n)!&#61;EOF && n>0){printf("%d %d %lld\n",&#43;&#43;kase,n,2*Cata[n]);}return 0;
}

推荐阅读
  • 微软发布紧急安全更新,所有Windows 10版本均面临影响!
    微软于周五紧急发布了两项安全更新,旨在解决Windows 10所有版本中Windows Codecs库和Visual Studio Code应用存在的安全隐患。此次更新是继本周初发布的月度例行安全补丁之外的额外措施,凸显了这些问题的紧迫性和重要性。这些漏洞可能被攻击者利用,导致系统权限提升或远程代码执行等严重后果。建议用户尽快安装更新,以确保系统的安全性。 ... [详细]
  • AngularJS uirouter模块下的状态管理机制深入解析
    本文深入探讨了 AngularJS 中 ui-router 模块的状态管理机制。通过详细分析状态配置、状态转换和嵌套状态等核心概念,结合实际案例,帮助开发者更好地理解和应用这一强大工具,提升单页面应用的开发效率和用户体验。 ... [详细]
  • 本文详细解析了 `DirectoryInfo.GetFiles` 方法的使用方法及其应用场景。通过示例代码展示了如何在 C# 程序中利用该方法获取指定目录下的所有文件列表,同时探讨了其参数选项和返回值类型,为开发者提供了实用的操作指南。 ... [详细]
  • 问题背景:在使用Struts2注解实现ZIP文件下载功能时,由于InputStream未正确关闭,导致Tomcat服务器异常终止。重启后,系统抛出`java.io.EOFException`错误。具体表现为,在文件下载过程中,如果请求未正常完成或客户端提前中断连接,未关闭的InputStream会占用资源,最终导致服务器资源耗尽,触发异常。为解决此问题,建议在代码中确保InputStream在使用完毕后能够及时且正确地关闭,以避免资源泄露和服务器崩溃。 ... [详细]
  • 利用命令行配置 ASP.NET Core 发布后的监听地址与环境变量设置
    通过命令行配置 ASP.NET Core 应用程序的发布设置,可以灵活地调整监听地址和环境变量。本文介绍如何在新建的 ASP.NET Core 项目中,通过修改 `Program.cs` 文件中的代码来实现这一功能。具体步骤包括在 `Program` 类的 `Main` 方法中添加相应的配置代码,以确保应用程序在不同环境中能够正确运行。此外,还将详细介绍如何使用命令行工具来设置和验证这些配置项,从而提高开发和部署的效率。 ... [详细]
  • 内网渗透技术详解:PTH、PTT与PTK在域控环境中的应用及猫盘内网穿透配置
    本文深入探讨了内网渗透技术,特别是PTH、PTT与PTK在域控环境中的应用,并详细介绍了猫盘内网穿透的配置方法。通过这些技术,安全研究人员可以更有效地进行内网渗透测试,解决常见的渗透测试难题。此外,文章还提供了实用的配置示例和操作步骤,帮助读者更好地理解和应用这些技术。 ... [详细]
  • 算术表达式分析与解析技术初探
    本文初步探讨了算术表达式的分析与解析技术,针对作者在职业转型过程中发现自身算法基础薄弱的问题,决定在接下来的三个月内,系统地学习和掌握常用数据结构与算法,以提升个人技术能力。研究内容不仅涵盖了基本的算术表达式解析方法,还深入讨论了其在实际应用中的优化策略,为相关领域的进一步研究奠定了基础。 ... [详细]
  • PAT甲级 1068 寻找更多硬币 (30分) 01背包问题与路径优化
    PAT甲级 1068 寻找更多硬币 (30分) 01背包问题与路径优化 ... [详细]
  • 在处理Java程序时,中文乱码是一个常见的问题。本文将详细探讨导致中文乱码的原因,并分享有效的解决方案,帮助开发者在实际工作中避免这一问题。通过具体的代码示例和最佳实践,本文旨在提供全面的指导,确保中文字符在不同环境下的正确显示。 ... [详细]
  • 本文深入解析了HTML表格与表单元素,特别是图像映射技术的应用。详细介绍了如何利用 `` 标签实现内容的行列对齐,并探讨了 HTML4 中 Flash 的引入及其在网页设计中的应用。通过实例展示了 `` 标签的使用方法,帮助开发者更好地理解和掌握这些核心元素。 ... [详细]
  • 通过命令行工具 `virt-install` 配置和安装虚拟机环境。`virt-install` 是一个基于 `libvirt` 虚拟化管理库的命令行工具,用于创建新的虚拟机实例。该工具支持通过串行控制台和 SDL 图形界面进行虚拟机的安装和管理,适用于多种操作系统和虚拟化平台。 ... [详细]
  • 本文深入探讨了Windows操作系统中线程同步机制的关键技术,重点分析了`WaitForSingleObject`和`Event`的使用方法及其应用场景。通过详细介绍`CreateEvent`函数的创建过程及其在判断线程退出和实现线程间同步中的重要作用,结合具体实例,展示了如何高效地利用这些工具来解决多线程编程中的常见问题。此外,文章还讨论了这些机制在实际开发中的最佳实践和注意事项,为开发者提供了宝贵的参考。 ... [详细]
  • 在探索 Unity Shaders 的过程中,我逐渐意识到掌握 OpenGL 基础知识的重要性。本文将详细介绍 OpenGL 的核心概念和基本操作,帮助读者从零开始理解这一图形编程技术。通过实例和代码解析,我们将深入探讨如何利用 OpenGL 创建高效的图形应用。无论你是初学者还是有一定经验的开发者,都能从中受益匪浅。 ... [详细]
  • 通过采用JSON数据格式,能够高效且精确地获取用户的实时地理位置信息,为各类位置服务应用提供可靠的数据支持。该方法不仅简化了数据交换流程,还提高了地理信息处理的准确性和效率,适用于移动应用、导航系统及物联网设备等多种场景。 ... [详细]
  • 本文详细探讨了 Java 中定义宏的方法,并与 C++ 中的 `#define` 用法进行了对比。通过具体示例,深入解析了两者在预处理阶段的不同机制及其应用场景,帮助开发者更好地理解和选择合适的宏定义方式。 ... [详细]
author-avatar
晓云71_783
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有