C#,動態規劃(DP)丟雞蛋問題(Egg Dropping Puzzle)的三種算法與源代碼

1?扔雞蛋問題

動態規劃(Dynamic Programming,DP)是運籌學的一個分支,是求解決策過程最優化的過程。20世紀50年代初,美國數學家貝爾曼(R.Bellman)等人在研究多階段決策過程的優化問題時,提出了著名的最優化原理,從而創立了動態規劃。動態規劃的應用極其廣泛,包括工程技術、經濟、工業生產、軍事以及自動化控制等領域,并在背包問題、生產經營問題、資金管理問題、資源分配問題、最短路徑問題和復雜系統可靠性問題等中取得了顯著的效果。

扔雞蛋問題是計算機程序設計中的一個經典問題。從一幢樓房的不同樓層往下扔雞蛋,用最少的最壞情況試驗次數,確定雞蛋不會摔碎的最高安全樓層。僅有一個雞蛋供試驗時,只能采用順序查找法。有足夠多的雞蛋時,可以采用二分查找法。有多于一個但數量有限的雞蛋時,采用動態規劃方法求解。雙蛋問題 (two-egg problem) 是本問題的一個特例,曾出現于谷歌的程序員面試題中。
?

2 源程序

using System;
using System.Collections;
using System.Collections.Generic;

namespace Legalsoft.Truffer.Algorithm
{
?? ?/// <summary>
?? ?/// Dynamic Programming
?? ?/// Egg Dropping Puzzle
?? ?/// </summary>
?? ?public static partial class Algorithm_Gallery
?? ?{
?? ??? ?public static int Egg_Drop(int n, int k)
?? ??? ?{
?? ??? ??? ?if (k == 1 || k == 0)
?? ??? ??? ?{
?? ??? ??? ??? ?return k;
?? ??? ??? ?}
?? ??? ??? ?if (n == 1)
?? ??? ??? ?{
?? ??? ??? ??? ?return k;
?? ??? ??? ?}
?? ??? ??? ?int min = int.MaxValue;
?? ??? ??? ?for (int x = 1; x <= k; x++)
?? ??? ??? ?{
?? ??? ??? ??? ?int res = Math.Max(Egg_Drop(n - 1, x - 1), Egg_Drop(n, k - x));
?? ??? ??? ??? ?if (res < min)
?? ??? ??? ??? ?{
?? ??? ??? ??? ??? ?min = res;
?? ??? ??? ??? ?}
?? ??? ??? ?}
?? ??? ??? ?return min + 1;
?? ??? ?}

?? ??? ?public static int Egg_Drop_Second(int n, int k)
?? ??? ?{
?? ??? ??? ?int[,] eggFloor = new int[n + 1, k + 1];

?? ??? ??? ?for (int i = 1; i <= n; i++)
?? ??? ??? ?{
?? ??? ??? ??? ?eggFloor[i, 1] = 1;
?? ??? ??? ??? ?eggFloor[i, 0] = 0;
?? ??? ??? ?}

?? ??? ??? ?for (int j = 1; j <= k; j++)
?? ??? ??? ?{
?? ??? ??? ??? ?eggFloor[1, j] = j;
?? ??? ??? ?}
?? ??? ??? ?for (int i = 2; i <= n; i++)
?? ??? ??? ?{
?? ??? ??? ??? ?for (int j = 2; j <= k; j++)
?? ??? ??? ??? ?{
?? ??? ??? ??? ??? ?eggFloor[i, j] = int.MaxValue;
?? ??? ??? ??? ??? ?for (int x = 1; x <= j; x++)
?? ??? ??? ??? ??? ?{
?? ??? ??? ??? ??? ??? ?int res = 1 + Math.Max(eggFloor[i - 1, x - 1], eggFloor[i, j - x]);
?? ??? ??? ??? ??? ??? ?if (res < eggFloor[i, j])
?? ??? ??? ??? ??? ??? ?{
?? ??? ??? ??? ??? ??? ??? ?eggFloor[i, j] = res;
?? ??? ??? ??? ??? ??? ?}
?? ??? ??? ??? ??? ?}
?? ??? ??? ??? ?}
?? ??? ??? ?}

?? ??? ??? ?return eggFloor[n, k];
?? ??? ?}

?? ??? ?private static readonly int MAX_EGGS = 1000;
?? ??? ?private static int[,] egg_drop_dump = new int[MAX_EGGS, MAX_EGGS];

?? ??? ?public static int Egg_Drop_Third(int n, int k)
?? ??? ?{
?? ??? ??? ?if (egg_drop_dump[n, k] != -1)
?? ??? ??? ?{
?? ??? ??? ??? ?return egg_drop_dump[n, k];
?? ??? ??? ?}
?? ??? ??? ?if (k == 1 || k == 0)
?? ??? ??? ?{
?? ??? ??? ??? ?return k;
?? ??? ??? ?}
?? ??? ??? ?if (n == 1)
?? ??? ??? ?{
?? ??? ??? ??? ?return k;
?? ??? ??? ?}

?? ??? ??? ?int min = int.MaxValue;
?? ??? ??? ?for (int x = 1; x <= k; x++)
?? ??? ??? ?{
?? ??? ??? ??? ?int res = Math.Max(Egg_Drop_Third(n - 1, x - 1), Egg_Drop_Third(n, k - x));
?? ??? ??? ??? ?if (res < min)
?? ??? ??? ??? ?{
?? ??? ??? ??? ??? ?min = res;
?? ??? ??? ??? ?}
?? ??? ??? ?}
?? ??? ??? ?egg_drop_dump[n, k] = min + 1;
?? ??? ??? ?return min + 1;
?? ??? ?}
?? ?}
}

3 代碼格式

using System;
using System.Collections;
using System.Collections.Generic;namespace Legalsoft.Truffer.Algorithm
{/// <summary>/// Dynamic Programming/// Egg Dropping Puzzle/// </summary>public static partial class Algorithm_Gallery{public static int Egg_Drop(int n, int k){if (k == 1 || k == 0){return k;}if (n == 1){return k;}int min = int.MaxValue;for (int x = 1; x <= k; x++){int res = Math.Max(Egg_Drop(n - 1, x - 1), Egg_Drop(n, k - x));if (res < min){min = res;}}return min + 1;}public static int Egg_Drop_Second(int n, int k){int[,] eggFloor = new int[n + 1, k + 1];for (int i = 1; i <= n; i++){eggFloor[i, 1] = 1;eggFloor[i, 0] = 0;}for (int j = 1; j <= k; j++){eggFloor[1, j] = j;}for (int i = 2; i <= n; i++){for (int j = 2; j <= k; j++){eggFloor[i, j] = int.MaxValue;for (int x = 1; x <= j; x++){int res = 1 + Math.Max(eggFloor[i - 1, x - 1], eggFloor[i, j - x]);if (res < eggFloor[i, j]){eggFloor[i, j] = res;}}}}return eggFloor[n, k];}private static readonly int MAX_EGGS = 1000;private static int[,] egg_drop_dump = new int[MAX_EGGS, MAX_EGGS];public static int Egg_Drop_Third(int n, int k){if (egg_drop_dump[n, k] != -1){return egg_drop_dump[n, k];}if (k == 1 || k == 0){return k;}if (n == 1){return k;}int min = int.MaxValue;for (int x = 1; x <= k; x++){int res = Math.Max(Egg_Drop_Third(n - 1, x - 1), Egg_Drop_Third(n, k - x));if (res < min){min = res;}}egg_drop_dump[n, k] = min + 1;return min + 1;}}
}

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

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

相關文章

船舶制造5G智能工廠數字孿生可視化平臺,推進船舶行業數字化轉型

船舶制造5G智能工廠數字孿生可視化平臺&#xff0c;推進船舶行業數字化轉型。隨著數字化時代的到來&#xff0c;船舶行業正面臨著前所未有的機遇與挑戰。為了適應這一變革&#xff0c;船舶制造企業需要加快數字化轉型的步伐&#xff0c;提高生產效率、降低成本并增強市場競爭力…

電氣機械5G智能工廠數字孿生可視化平臺,推進電氣機械行業數字化轉型

電氣機械5G智能工廠數字孿生可視化平臺&#xff0c;推進電氣機械行業數字化轉型。隨著科技的不斷發展&#xff0c;數字化轉型已經成為各行各業發展的重要趨勢。電氣機械行業作為傳統制造業的重要組成部分&#xff0c;也面臨著數字化轉型的挑戰和機遇。為了更好地推進電氣機械行…

就業月薪14K!兩年后漲到25K! 考研失敗后,這個95年小哥哥成功轉行軟件測試,人生開掛了!

01 考研連續失敗 因為沒有特別明確的職業規劃&#xff0c;加上內心的學歷崇拜情節。大學畢業后&#xff0c;我沒有選擇參加工作&#xff0c;而是毅然選擇了加入考研大軍。 備考的日子緊張有序&#xff0c;我也一直在題海里廢寢忘食的遨游&#xff0c;本以為能順順當當地考上自…

每日學習總結20240221

每日總結 20240221 花自飄零水自流。一種相思&#xff0c;兩處閑愁。 —— 李清照「一剪梅紅藕香殘玉簟秋」 1. stat 在Linux中&#xff0c;stat 是一個用于顯示文件或文件系統狀態的命令行工具。它提供了關于文件的詳細信息&#xff0c;包括文件類型、權限、大小、所有者、修…

Codeforces Round 490 (Div. 3)

目錄 A. Mishka and Contest B. Reversing Encryption C. Alphabetic Removals D. Equalize the Remainders E. Reachability from the Capital F. Cards and Joy A. Mishka and Contest 依照題目意思左右遍歷標記即可 void solve(){cin>>n>>m;for(int i1;i…

Windows環境下查看磁盤層級占用空間的解決方案

大家好,我是愛編程的喵喵。雙985碩士畢業,現擔任全棧工程師一職,熱衷于將數據思維應用到工作與生活中。從事機器學習以及相關的前后端開發工作。曾在阿里云、科大訊飛、CCF等比賽獲得多次Top名次。現為CSDN博客專家、人工智能領域優質創作者。喜歡通過博客創作的方式對所學的…

C++ //練習 7.48 假定Sales_data的構造函數不是explicit的,則下述定義將執行什么樣的操作?

C Primer&#xff08;第5版&#xff09; 練習 7.48 練習 7.48 假定Sales_data的構造函數不是explicit的&#xff0c;則下述定義將執行什么樣的操作&#xff1f; string null_isbn("9-999-99999-9"); Sales_data item1(null_isbn); Sales_data item2("9-999-99…

生產環境下,應用模式部署flink任務,通過hdfs提交

前言 通過通過yarn.provided.lib.dirs配置選項指定位置&#xff0c;將flink的依賴上傳到hdfs文件管理系統 1. 實踐 &#xff08;1&#xff09;生產集群為cdh集群&#xff0c;從cm上下載配置文件&#xff0c;設置環境 export HADOOP_CONF_DIR/home/conf/auth export HADOOP_CL…

前端常見面試題之react基礎

文章目錄 1. react事件為何需要bind this(1)箭頭函數(2)bind改變this指向(3)構造函數中使用箭頭函數綁定this 2. react事件和dom事件的區別3. react事件中的event參數4. react事件中的自定義參數5. 自定義參數和event參數共存6. 受控組件和非受控組件7. props實現父子組件通信1…

Android將 ViewBinding封裝到BaseActivity基類中(Java版)

在Android中使用Java語言將ViewBinding封裝到基類中&#xff0c;操作步驟如下&#xff1a; 1、在項目的build.gradle文件中啟用了ViewBinding&#xff0c;添加以下代碼&#xff1a; android {...buildFeatures {viewBinding true} } 2、創建一個名為“BaseActivity”的基類&…

vue2和vue3 setup beforecreate create生命周期時間比較

創建一個vue程序&#xff0c;vue3可以兼容Vue2的寫法&#xff0c;很流暢完全沒問題 寫了一個vue3組件 <template><div></div> </template><script lang"ts"> import {onMounted} from vue export default{data(){return {}},beforeCr…

解決SpringAMQP工作隊列模型程序報錯:WARN 48068:Failed to declare queue: simple.queue

這里寫目錄標題 1.運行環境2.報錯信息3.解決方案4.查看解決之后的效果 1.運行環境 使用docker運行了RabbitMQ的服務器&#xff1a; 在idea中導入springAMQP的jar包&#xff0c;分別編寫了子模塊生產者publisher&#xff0c;消費者consumer&#xff1a; 1.在publisher中運行測試…

【機器學習的主要任務和應用領域】

曾夢想執劍走天涯&#xff0c;我是程序猿【AK】 目錄 簡述概要知識圖譜 簡述概要 了解機器學習的主要任務和應用領域 知識圖譜 機器學習的主要任務可以分為監督學習、無監督學習和半監督學習。 監督學習&#xff1a;這是機器學習中最為常見的一類任務&#xff0c;基于已知類…

[TCP] TCP/IP 基礎知識詞典(3)

我想統計一下&#xff0c;TCP/IP 尤其是TCP協議&#xff0c;能搜到的常見的問題&#xff0c;整理起來&#xff0c;關鍵詞添加在目錄中&#xff0c;便于以后查閱。 目前預計整理共3篇&#xff1a; [TCP] TCP/IP 基礎知識問答 &#xff1a;基礎知識 [TCP] TCP/IP 基礎知識問答&…

R語言數據分析(五)

R語言數據分析&#xff08;五&#xff09; 文章目錄 R語言數據分析&#xff08;五&#xff09;前言一、什么是整潔的數據二、延長數據2.1 列名中的數據值2.2 pivot_longer()的處理原理2.3 列名中包含許多變量的情況2.4 列名同時包含數據和變量 三、擴寬數據3.1 pivot_wider的處…

JavaSec 之 SQL 注入簡單了解

文章目錄 JDBC 注入語句拼接(Statement)修復方案 語句拼接(PrepareStatement)修復方案 預編譯 JdbcTemplate修復方案 MyBatisLike 注入Order By 注入In 注入 寒假學了一個月 pwn&#xff0c;真心感覺這玩意太底層學的我生理不適應了&#xff0c;接下來學一段時間 java 安全緩一…

力扣226 翻轉二叉樹 Java版本

文章目錄 題目描述解題思路代碼 題目描述 給你一棵二叉樹的根節點 root &#xff0c;翻轉這棵二叉樹&#xff0c;并返回其根節點。 示例 1&#xff1a; 輸入&#xff1a;root [4,2,7,1,3,6,9] 輸出&#xff1a;[4,7,2,9,6,3,1] 示例 2&#xff1a; 輸入&#xff1a;root…

[云原生] 二進制k8s集群(下)部署高可用master節點

在上一篇文章中&#xff0c;就已經完成了二進制k8s集群部署的搭建&#xff0c;但是單機master并不適用于企業的實際運用&#xff08;因為單機master中&#xff0c;僅僅只有一臺master作為節點服務器的調度指揮&#xff0c;一旦宕機。就意味著整個集群的癱瘓&#xff0c;所以成熟…

代理技術引領出海征程

在數字娛樂的繁榮時代&#xff0c;游戲開發者和發行商們意識到&#xff0c;要在全球市場立足&#xff0c;必須邁向國際化的出海之路。然而&#xff0c;這一旅程面臨著跨越網絡壁壘、適應多元文化和提升全球連接性的巨大挑戰。本文將深入探討代理技術在游戲行業出海過程中的創新…

這才開工沒幾天收到Offer了,簡歷改的好,找工作沒煩惱。

喜報喜報 這才開工沒幾天&#xff0c;就收到了喜報&#xff01; 就像上面截圖中所說的一樣&#xff1a;簡歷改了真的有用。 我也和大家分享一下優化簡歷的技巧&#xff0c;希望對大家有幫助&#xff0c;把握住金三銀四的機會&#xff0c;都能順利上岸&#xff0c;升職加薪&am…