【TL】【编码】瞬间移动-百度之星初赛(Astar Round2B)1003-2016.05.22

瞬间移动

Accepts: 1018 Submissions: 3620
Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)

Problem Description
有一个无限大的矩形,初始时你在左上角(即第一行第一列),每次你都可以选择一个右下方格子,并瞬移过去(如从下图中的红色格子能直接瞬移到蓝色格子),求到第n行第m列的格子有几种方案,答案对1000000007取模。
C702-1003-1.jpg

Input
多组测试数据。
两个整数n,m(2≤n,m≤100000)

Output
一个整数表示答案

Sample Input
4 5

Sample Output
10

我的代码

一、递归法

思路:到达第n行第m列的格子的方案数=到达第i行(1-n)第j(1-m)列的格子的方案数的总和+1(直接从1,1移动到目标处)。用递归实现。

#pragma comment(linker, "/STACK:1024000000,1024000000")
#include <iostream>using namespace std;long fun(int a, int b) {long result = 1;if (a == 2 || b == 2) {return result;}ielse {for (int i = a - 1;i > 1;i--) {for (int j = b - 1;j > 1;j--) {result += fun(i, j);result = result % 1000000007;}}}return result;
}
int main() {int n, m;while (cin >> n >> m) {cout << fun(n, m) << endl;}return 0;
}

缺点:超时。时间复杂度高。对靠近1,1处的许多格子的路径数进行了大量重复计算。可不可以减少这些冗余计算?

二、用二维数组存储

思路:要计算到达第n行第m列的格子的方案数,就要分别计算到达第i(1-n)行第j(1-m)列的格子的方案数,然后对他们求和。为了避免重复计算,可以将每一个格子对应的到达它本身的方案数存起来。这样可以大大减小冗余计算,减小时间复杂度,代价是空间消耗。

#include <iostream>using namespace std;long a[100000][100000];long result;
void sum(int b, int c) {for (int i = 0;i<b;i++) {for (int j = 0;j<c;j++) {a[b][c] += a[i][j];a[b][c] = a[b][c] % 1000000007;}}return;
}
int main() {int n, m;while (cin >> n >> m) {result = 1;for (int i = 2;i < n;i++) {for (int j = 2;j < m;j++) {if (i == 2 || j == 2)a[i - 2][j - 2] = 1;else {sum(i - 2, j - 2);}}}cout << a[n - 2][m - 2] << endl;}return 0;
}

缺点:空间复杂度太大,n和m最大是100000,所以这种方法所需要的数组长度最大竟然可达10的10次方,即80GB!

改进思路:在方法二的基础上,先考虑正方形这一特殊情况,用大小为100000的数组存储到达第n行第n列的格子的方案数。不失一般性,假设m>n,则第n行第m列的格子的方案数比第n行第n列的格子多出了“从第(m-n)列到达目的”的方案数。这第(m-n)列可能是多列,行序号是2-(n-1)。不过这些处于正方形之外的格子和那些不在右斜对角线上的格子一样,又涉及重复计算,导致时间复杂度升高。所以这算是方法一和方法二的一种平衡。但时间复杂度能降多少,还有待实验验证。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/458479.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

蓝懿IOS委托模式代理模式

今天刘国斌老师讲了有关oc语言里的委托模式&#xff08;代理模式&#xff09;&#xff0c;通过了一个打地鼠的游戏讲解了委托模式的功能作用&#xff0c;之后连带讲解了协议的书写和使用。 打地鼠功能包括屏幕随机出现地鼠&#xff0c;点击消失&#xff0c;如果不点击5秒后自…

C#调用C++类(以COM组件的形式)

如果想用C#调用C/C写的函数&#xff0c;可以先将C/C的函数写成dll文件&#xff0c;由C#用DllImport的方式来调用&#xff0c;但是这种方法无法调用C写的类&#xff0c;如果想调用C类&#xff0c;可以先把C类封装成COM组件&#xff0c;再由C#来调用。方法如下&#xff08;以VS20…

Duplicate interface definition for class

在添加文件之后&#xff0c;报 Duplicate interface definition for class 原因是&#xff1a;重复添加文件 仔细检查检查

dom解析xml

为什么80%的码农都做不了架构师&#xff1f;>>> 转载自&#xff1a;http://www.cnblogs.com/shenliang123/archive/2012/05/11/2495252.html 使用eclipse需要手动导入crimson.jar包 org.w3c.dom(java dom)解析XML文档 位于org.w3c.dom操作XML会比较简单&#xff0c…

逃离北上广:你以为回到小城市就非常幸福了吗?

忘记在哪儿看的了。感觉不错&#xff0c;随手发出来。我博客也有更新&#xff0c;底下有留个人博客链接 在过去几年里。“逃离北上广”一直是一个热门短语。拿我自己来说&#xff0c;工作在上海&#xff0c;但又不是上海人。毕业后&#xff0c;就选择租房&#xff0c;首先就为这…

Redefinition of enumerator ios

添加文件之后 报 Redefinition of enumerator iOS 原因是&#xff1a;重复添加文件 仔细检查检查

[WinForm] VS2010发布、打包安装程序(超全超详细)

from: http://blog.csdn.net/y13156556538/article/details/555321841、 在vs2010 选择“新建项目”→“ 其他项目类型”→“ Visual Studio Installer→“安装项目”&#xff1a; &#xff08;如果是在solution中添加&#xff0c;就直接solution -- 右键 -- 添加project&#…

易货Beta版本发布说明

说明 由于前几天确实比较忙&#xff0c;所以没来得及写发布说明。 功能 我们在beta版本主要加入了以下几个功能&#xff1a; 一&#xff1a;增加了用户的发布界面 二&#xff1a;增加了用户的购买界面 三&#xff1a;使用下拉刷新取代了之前的handler后台更新 四&#xff1a;优…

【译】什么导致了Context泄露:Handler内部类

思考下面代码 1 public class SampleActivity extends Activity { 2 3 private final Handler mLeakyHandler new Handler() { 4 Override 5 public void handleMessage(Message msg) { 6 // ... 7 } 8 } 9 } 如果没有仔细观察&#xff0c;上面的代码…

js基础 one

js忽略空格符和换行符 js严格区分大小写 &#xff1b;为js的结束符 可以使用{}扩成一个语句组&#xff0c;形成一个block块 通过 \ 实现折行操作 document.write(hello \world); 通过document.write() 向文档书写内容 通过xonsole.log()向控制台写入内容变量 js变量重名会产…

关于.Net中Process和ProcessStartInfor的使用

System.Diagnostics.Process.Start(); 能做什么呢&#xff1f;它主要有以下几个功能&#xff1a;1、打开某个链接网址&#xff08;弹窗&#xff09;。2、定位打开某个文件目录。3、打开系统特殊文件夹&#xff0c;如“控制面板”等。那么它是怎么实现这几个功能的呢&#xff1f…

Sublime 的中文乱码问题

Sublime Text 是现在最受欢迎的文本编辑器&#xff0c;没有之一。它非常简洁&#xff0c;而且对各种代码的高亮显示很美观。但是&#xff0c;它默认不支持 GBK、Shift-JIS 等中文、日本编码格式&#xff0c;故打开此类文件会出现乱码。 安装 Package Control 首先要安装一个包控…

苹果应用上架遇到的问题(2017年4月27日)

在更新app store的时候报&#xff08;如图&#xff09;&#xff1a; ERROR ITMS-90086: "Missing 64-bit support. iOS apps submitted to the App Store must include 64-bit support and be built with the iOS 8 SDK or later. We recommend using the default "S…

工作者对象HttpWorkerRequest

在ASP.NET中&#xff0c;用于处理的请求&#xff0c;需要封装为HttpWorkerRequest类型的对象。该类为抽象类&#xff0c;定义在命名空间System.Web下。 #region Assembly System.Web.dll, v4.0.0.0 // C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFr…

C#输入输出重定向

当 Process 将文本写入其标准流中时&#xff0c;通常将在控制台上显示该文本。通过重定向 StandardOutput 流&#xff0c;可以操作或取消进程的输出。例如&#xff0c;可以筛选文本、用不同方式将其格式化&#xff0c;也可以将输出同时写入控制台和指定的日志文件中。有两种方式…

C语言笔试常考知识点

1. const 关键字 a) const int a; b) int const a; c) const int *a; d) int * const a; e) int const * const a; 解析&#xff1a; a) a为一个int型变量&#xff0c;在它被定义时就应当对其初始化&#xff0c;因为以后就没有机会再去改变它了。 b) 与 a) 是一个意思&a…

苹果应用上架,一些信息的勾选(2017年4月27日)

1、分级的各种选项的选择全部选否 &#xff08;我们公司是医疗相关的app&#xff0c;医疗的选项也是选择的否&#xff09; 2、

jsp页面路径问题

jsp路径默认不是项目跟路径 一、 <% page language"java" import"java.util.*" pageEncoding"utf-8"%> <% String path request.getContextPath(); String basePath request.getScheme() "://" request.getServerName() …

C# 线程池ThreadPool

什么是线程池&#xff1f;为什么要用线程池&#xff1f;怎么用线程池&#xff1f; 1. 什么是线程池&#xff1f;.NET Framework的ThreadPool类提供一个线程池&#xff0c;该线程池可用于执行任务、发送工作项、处理异步 I/O、代表其他线程等待以及处理计时器。那么什么是线程池…

苹果应用上架,图片的要求(2017年4月27日)

看这个提示应该就明白了吧。 哈哈&#xff0c;我还是自己再说一遍加深一下印象吧&#xff1a;如果应用在各个尺寸iphone屏幕上面外观一样&#xff0c;就只准备5.5英寸的图就可以了&#xff1b;如果有所不同&#xff0c;就按照实际情况&#xff0c;准备不同屏幕尺寸的图片即可。…