數據結構與算法-動態規劃-機器人達到指定位置方法數

機器人達到指定位置方法數

來自左程云老師書中的一道題

【題目】

假設有排成一行的 N 個位置,記為 1~NN 一定大于或等于 2。開始時機器人在其中的 M

位置上(M 一定是 1~N 中的一個),機器人可以往左走或者往右走,如果機器人來到 1 位置,

那么下一步只能往右來到 2 位置;如果機器人來到 N 位置,那么下一步只能往左來到 N-1 位置。

規定機器人必須走 K 步,最終能來到 P 位置(P 也一定是 1~N 中的一個)的方法有多少種。給

定四個參數 NMKP,返回方法數。

【舉例】

N=5,M=2,K=3,P=3

上面的參數代表所有位置為 1 2 3 4 5。機器人最開始在 2 位置上,必須經過 3 步,最后到

達 3 位置。走的方法只有如下 3 種:

1)從 2 到 1,從 1 到 2,從 2 到 3

2)從 2 到 3,從 3 到 2,從 2 到 3

3)從 2 到 3,從 3 到 4,從 4 到 3

所以返回方法數 3。

N=3,M=1,K=3,P=3

上面的參數代表所有位置為 1 2 3。機器人最開始在 1 位置上,必須經過 3 步,最后到達 3

位置。怎么走也不可能,所以返回方法數 0。

遞歸代碼:

public static int process(int N,int M,int K, int P) {if(K == 0) {return M == P? 1:0;}if(M ==1) {return process(N,M+1,K-1,P);}if(M == N) {return process(N,M-1,K-1,P);}return process(N,M+1,K-1,P) + process(N,M-1,K-1,P);}

遞歸推導動態規劃

前提:判斷是否是無后效性的。所謂無后效性是指是指一個遞歸狀態的返回值與怎么到達這個狀態的路徑無關。

  1. 找到什么可變參數可以代表一個遞歸狀態,也就是那些參數一旦確定,返回值也就確定了
  2. 把可變參數的所有組合映射成一張表,有1個可變參數就是一維表,有2個可變參數就是一張二維表….
  3. 最終答案要的是表中哪個位置,在表中標出。
  4. 根據遞歸的base case ,把這張表最簡單、不需要依賴其他位置的那些位置填好
  5. 根據遞歸過程非base case的部分,也就是分析表中的普遍位置需要怎么計算得到,那么這張表的填寫順序也就確定了
  6. 填好表,返回最終答案在表中位置的值。

動態規劃代碼:

public static int process2(int N,int M,int K, int P) {int[][] dp = new int[K+1][N+1];dp[0][P] = 1;for(int i =1;i<=K;i++) {for(int j=1;j<=N;j++) {if(j==1) {dp[i][j] = dp[i-1][j+1];} else if(j == N) {dp[i][j] = dp[i-1][j-1];} else {dp[i][j] =  dp[i-1][j+1] + dp[i-1][j-1];}}}return dp[K][M];}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/214985.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/214985.shtml
英文地址,請注明出處:http://en.pswp.cn/news/214985.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

基于大語言模型的復雜任務認知推理算法CogTree

近日&#xff0c;阿里云人工智能平臺PAI與華東師范大學張偉教授團隊合作在自然語言處理頂級會議EMNLP2023上發表了基于認知理論所衍生的CogTree認知樹生成式語言模型。通過兩個系統&#xff1a;直覺系統和反思系統來模仿人類產生認知的過程。直覺系統負責產生原始問題的多個分解…

10 # 類:繼承和成員修飾符

類的基本實現 類的成員屬性都是實例屬性&#xff0c;而不是原型屬性&#xff0c;類的成員方法都是原型方法。 class Dog {constructor(name: string) {this.name name;}name: string;run() {} }console.log(Dog.prototype); let dog new Dog("wangwang"); consol…

知識筆記(五十四)———mysql比較varchar值大小_Mysql varchar大小長度問題

1、限制規則 字段的限制在字段定義的時候有以下規則&#xff1a; a) 存儲限制 varchar 字段是將實際內容單獨存儲在聚簇索引之外&#xff0c;內容開頭用1到2個字節表示實際長度(長度超過255時需要2個字節)&#xff0c;因此最大長度不能超過65535。 b) 編碼長度限制 字符類…

低功耗模式的通用 MCU ACM32F0X0 系列,具有高整合度、高抗干擾、 高可靠性的特點

ACM32F0X0 系列是一款支持多種低功耗模式的通用 MCU。集成 12 位 1.6 Msps 高精度 ADC 以及比 較器、運放、觸控按鍵控制器、段式 LCD 控制器&#xff0c;內置高性能定時器、多路 UART、LPUART、SPI、I2C 等豐富的通訊外設&#xff0c;內建 AES、TRNG 等信息安全模塊&#xff0…

kubeadm搭建單master多node的k8s集群--小白文,圖文教程

參考文獻 K8S基礎知識與集群搭建 kubeadm搭建單master多node的k8s集群—主要參考這個博客&#xff0c;但是有坑&#xff0c;故貼出我自己的過程&#xff0c;坑會少很多 注意&#xff1a; 集群配置是&#xff1a;一臺master&#xff1a;zabbixagent-k8smaster&#xff0c;兩臺…

C++類和對象——(10)綜合示例

一、示例對象數組&#xff1a; #include<iostream> using namespace std;class Point{private:int x,y;public:Point(int px0,int py0){xpx;ypy;}void init(int px0,int py0){xpx;ypy;}void print(){cout<<"("<<x<<","<<y…

FFmpeg的AVInputFormat

文章目錄 結構體定義操作函數支持的AVOutputFormat 通過上面的分析&#xff0c;基本可以看到ffmpeg的套路了&#xff0c;首先一個context上下文&#xff0c;上下文里面一個priv_data 指針&#xff0c;然后再插件結構體中有一個priv_data_size&#xff0c;然后回調函數。 結構體…

JVM-GC調優-字節碼篇-01

筆記來源&#xff1a;JVM 注意&#xff1a;實在想學習可以看一下&#xff0c;讓自己更加了解JVM&#xff0c;看起來可能會枯燥。 JVM-概述 1、你的問題 1.1你被JVM傷害過嗎&#xff1f; 你是否也遇到過這些問題&#xff1f; 運行著的線上系統突然卡死&#xff0c;系統無法訪…

Flink SQL: 高效解析 Kafka 數據并存儲為 Parquet 至 HDFS

目錄 總體流程介紹 1. 從 Kafka 讀取數據 2. 使用 UDF 進行數據解析 3. 將

HTML中如何設置音頻和視頻?

文章目錄 &#x1f50a;嵌入音頻&#x1f39e;?嵌入視頻 &#x1f50a;嵌入音頻 HTML 元素用于在文檔中嵌入音頻內容。 元素可以包含一個或多個音頻資源&#xff0c; 這些音頻資源可以使用 src 屬性或者 元素來進行描述&#xff1a;瀏覽器將會選擇最合適的一個來使用。也可以使…

Centos7云服務器上安裝cobalt_strike_4.7。附cobalt_strike_4.7安裝包

環境這里是阿里的一臺Centos7系統。 開始安裝之前首先要確保自己安裝了java11及以上環境。 安裝java11步驟&#xff1a; sudo yum update sudo yum install java-11-openjdk-devel把服務器端&#xff08;CS工具分服務器端和客戶端&#xff09;的CS安裝到服務器上后給目錄下的…

Mongoose 對象文檔模型庫

一、介紹 Mongoose是一個對象文檔模型庫&#xff0c;官網&#xff1a;http://www.mongoosejs.net/ 二、作用 方便使用代碼操作Mongodb數據庫 三、使用流程 //1. 安裝 mongoose //2. 導入 mongoose const mongoose require(mongoose); //3. 連接數據庫 mongoose.connect(m…

某省資源交易中心 (js逆向)

該文章只是用于逆向學習&#xff0c;不得以商用或者是破壞他人利益的目的進行使用。如有侵權請聯系作者。 網站鏈接&#xff1a; bse64 aHR0cHM6Ly9nZ3p5ZncuZnVqaWFuLmdvdi5jbi9idXNpbmVzcy9saXN0Lw 分析環節 進入網站 進行翻頁請求時我們會發現改請求時ajax請求。 這里&…

hive-窗口函數

1 窗口函數語法 分析函數/專用窗口函數 over(partition by 列名 order by 列名 rows between 開始位置 and 結束位置) 常用的分析函數 常用的分析函數&#xff1a;sum()、max()、min()、avg()、count() 常用的專用窗口函數 專用窗口函數&#xff1a;row_number()、rank()、dens…

【簡易版】Linux下Protobuf 實現網絡版通訊錄--C++

一、介紹 該項目的主要目的是用于熟悉protobuf的使用&#xff0c;體驗數據在網絡中序列化反序列化的形式&#xff0c;并非一個完整的項目。 該通訊錄只實現了增加聯系人的功能。服務器端接收到請求后會將聯系人的信息打印。 二、環境搭建 使用Httplib庫&#xff0c;可以快速…

jsp文件引用的css修改后刷新不生效問題

問題 在對 JavaWeb 項目修改的過程中&#xff0c;發現修改了 jsp 文件引入的 css 文件的代碼后頁面的樣式沒有更新的問題。 原因 導致這個問題的原因可能是因為瀏覽器緩存的問題。 解決方法 下面介紹兩種解決方法&#xff0c;供大家參考&#xff1a; 1、給 link 標簽的 c…

TrustZone之安全虛擬化

在Armv7-A首次引入虛擬化時,它僅在非安全狀態中添加。在Armv8.3之前,Armv8也是如此,如下圖所示: 如前所述在切換安全狀態時,EL3用于托管固件和安全監視器。安全EL0/1托管受信任的執行環境(TEE),由受信任的服務和內核組成。 在安全狀態下,沒有對多個虛擬機的需…

Java基礎——什么是main方法

main方法是Java虛擬機調用的入口&#xff0c;該方法的權限必須是public&#xff0c;Java虛擬機在執行main方法時不必創建對象&#xff0c;所以該方法是static修飾&#xff0c;接收一個String類型的數組參數&#xff0c;數組保存執行Java命令時傳遞給所運行的類的參數&#xff0…

基于微信小程序和Spring、SpringMVC、MyBatis的汽車租賃管理系統

文章目錄 項目介紹主要功能截圖:部分代碼展示設計總結項目獲取方式?? 作者主頁:超級無敵暴龍戰士塔塔開 ?? 簡介:Java領域優質創作者??、 簡歷模板、學習資料、面試題庫【關注我,都給你】 ??文末獲取源碼聯系?? 項目介紹 基于微信小程序和Spring、SpringMVC、My…

Kafka生產問題總結及性能優化實踐

1、消息丟失情況 消息發送端&#xff1a; &#xff08;1&#xff09;acks0&#xff1a; 表示producer不需要等待任何broker確認收到消息的回復&#xff0c;就可以繼續發送下一條消息。性能最高&#xff0c;但是最容易丟消息。大數據統計報表場景&#xff0c;對性能要求很高&am…