【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.pswp.cn/news/458479.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/458479.shtml
英文地址,請注明出處:http://en.pswp.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;準備不同屏幕尺寸的圖片即可。…