国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

算法 預測贏家(動態(tài)規(guī)劃)

這篇具有很好參考價值的文章主要介紹了算法 預測贏家(動態(tài)規(guī)劃)。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。


前言

題目鏈接

給你一個整數(shù)數(shù)組 nums 。玩家 1 和玩家 2 基于這個數(shù)組設(shè)計了一個游戲。

玩家 1 和玩家 2 輪流進行自己的回合,玩家 1 先手。開始時,兩個玩家的初始分值都是 0 。每一回合,玩家從數(shù)組的任意一端取一個數(shù)字(即,nums[0] 或 nums[nums.length - 1]),取到的數(shù)字將會從數(shù)組中移除(數(shù)組長度減 1 )。玩家選中的數(shù)字將會加到他的得分上。當數(shù)組中沒有剩余數(shù)字可取時,游戲結(jié)束。

如果玩家 1 能成為贏家,返回 true 。如果兩個玩家得分相等,同樣認為玩家 1 是游戲的贏家,也返回 true 。你可以假設(shè)每個玩家的玩法都會使他的分數(shù)最大化。

算法 預測贏家(動態(tài)規(guī)劃)
算法 預測贏家(動態(tài)規(guī)劃)


一、題意解析

兩個值的時候必然是取較大的,三個值,取一個能使自己分數(shù)和最大的,后手必然留較小的給先手,因
此先手選一個值加上該較小值最大化。

由于"每個玩家的玩法都會使他的分數(shù)最大化",所以先手后手玩家的策略方式是一樣的,只是先后次序不同而已。

先手選的值,應(yīng)該比后手能選的值,達到"差值最大"的效果;
同理,后手選的值也會盡量比下一次先手選的值,達到"差值最大"的效果;
即:決策代碼是一致的。

int maxscore(int* nums, int left, int right)
{
	if (left == right)
	{
		return nums[left];
	}

	int sleft = nums[left] - maxscore(nums, left + 1, right);
	int sright = nums[right] - maxscore(nums, left, right - 1);

	return sleft >= sright ? sleft : sright;
}

bool PredictTheWinner(int* nums, int numsSize)
{
	return maxscore(nums, 0 ,numsSize - 1) >= 0;
}

二、動態(tài)規(guī)劃

喬治·桑塔亞納說過,“那些遺忘過去的人注定要重蹈覆轍?!边@句話放在問題求解過程中也同樣適用。不懂動態(tài)規(guī)劃的人
會在解決過的問題上再次浪費時間,懂的人則會事半功倍。

一種可以用動態(tài)規(guī)劃解決的情況就是會有反復出現(xiàn)的子問題,然后這些子問題還會包含更小的子問題。相比于不斷嘗試去解決這些反復出現(xiàn)的子問題,動態(tài)規(guī)劃會嘗試一次解決更小的子問題。之后我們可以將結(jié)果輸出記錄在表格中,我們在之后的計算中可以把這些記錄作為問題的原始解。

以下是兩種不同的動態(tài)規(guī)劃解決方案:

自上而下:你從最頂端開始不斷地分解問題,直到你看到問題已經(jīng)分解到最小并已得到解決,之后只用返回保存的答案即可。這叫做記憶存儲(Memoization)。

自下而上:你可以直接開始解決較小的子問題,從而獲得最好的解決方案。在此過程中,你需要保證在解決問題之前先解決子問題。這可以稱為表格填充算法(Tabulation,table-filling algorithm)。

動態(tài)規(guī)劃是逐一解決小問題,最終可以得到大問題答案的解決方案。

1)假設(shè)只有1個整數(shù),先手后手的最大差值就是這個唯一的整數(shù);

2)假設(shè)只有2個整數(shù),先手后手的最大差值應(yīng)該是:
先手盡量取最大值,后手在剩下的數(shù)中盡量去最大值,然后兩數(shù)相減得到最大差值

3)假設(shè)有3個整數(shù),先手盡量取一個最大值,后手也會在剩下2個數(shù)中,確保后手盡可能大,
即:后手保證在剩下2個數(shù)中,達到最大差值的效果。因此可以利用2)的方法。

4)假設(shè)有4個整數(shù),方法同3)。先手盡量取一個最大值,后手在剩下3個數(shù)中,
確保后手盡可能大。因此可以利用3)的方法。

因此,要求數(shù)組中索引 0 到 length 的最大差值,我們需要這么做:

1)想求[0, length]范圍的最大差值, 需求出數(shù)組范圍比[0, length]小1 的最大差值;
2) 想求[0, length]小1 范圍的最大差值, 需求出數(shù)組范圍比[0, length]小2 的最大差值;
3) 想求[0, length]小2 范圍的最大差值, 需求出數(shù)組范圍比[0, length]小3 的最大差值;文章來源地址http://www.zghlxwxcb.cn/news/detail-400554.html

//使用一個dp數(shù)組, 保存 i,j 之間 "先后手的最大差值";因此需要定義 dp[][];
//dp[left][right] = max(nums[left] - dp[left+1][right], num[right] - dp[left][right-1])
//dp數(shù)組的初始值應(yīng)該是 left == right時, dp[left][left] = nums[left]
//dp[0][length]的意義: 整個數(shù)組先手后手的最大差值。
//dp[0][length] = max(nums[0] - dp[1][right], num[length] - dp[0][length-1])
int max(int a, int b)
{
	return a > b ? a : b;
}

bool PredictTheWinner(int* nums, int numsSize)
{
	int dp[numsSize][numsSize];

	for (int i = 0; i < numsSize; i++)
	{
		dp[i][i] = nums[i];
	}

	for (int left = numsSize - 2; left >= 0; left--)
	{
		for (int right = left + 1; right < numsSize; right++)
		{
			dp[left][right] = max(nums[left] - dp[left+1][right], nums[right] - dp[left][right-1]);
		}
	}

	return dp[0][numsSize - 1] >= 0;
}

到了這里,關(guān)于算法 預測贏家(動態(tài)規(guī)劃)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔相關(guān)法律責任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • 動態(tài)規(guī)劃2:題目

    動態(tài)規(guī)劃2:題目

    目錄 第1題 Fibonacci 第2題 字符串分割(Word Break) .第3題 三角矩陣(Triangle) 第4題 路徑總數(shù)(Unique Paths) 第5題 最小路徑和(Minimum Path Sum) 第6題 背包問題 第7題 回文串分割(Palindrome Partitioning) 第8題 編輯距離(Edit Distance) 第9題 不同子序列(Distinct Subsequences) 分析問題: 1. 狀態(tài)定義F(i):第

    2024年02月06日
    瀏覽(31)
  • 【LeetCode】動態(tài)規(guī)劃類題目詳解

    【LeetCode】動態(tài)規(guī)劃類題目詳解

    所有題目均來自于LeetCode,刷題代碼使用的Python3版本 如果某一個問題有重疊的子問題,則使用動態(tài)規(guī)劃進行求解是最有效的。 動態(tài)規(guī)劃中每一個狀態(tài)一定是由上一個狀態(tài)推導出來的,這一點區(qū)別于貪心算法 動態(tài)規(guī)劃五部曲 確定dp數(shù)組以及下標的含義 確定遞推公式 dp數(shù)組如何

    2024年04月11日
    瀏覽(37)
  • 代碼隨想錄 動態(tài)規(guī)劃-基礎(chǔ)題目

    代碼隨想錄 動態(tài)規(guī)劃-基礎(chǔ)題目

    目錄 509.斐波那契數(shù)? 70.爬樓梯 746.使用最小花費爬樓梯 62.不同路徑 63.不同路徑|| 343.整數(shù)拆分 96.不同的二叉樹 509. 斐波那契數(shù) 簡單 斐波那契數(shù) ?(通常用? F(n) ?表示)形成的序列稱為? 斐波那契數(shù)列 ?。該數(shù)列由? 0 ?和? 1 ?開始,后面的每一項數(shù)字都是前面兩項數(shù)字的和

    2024年03月18日
    瀏覽(36)
  • 一維動態(tài)規(guī)劃經(jīng)典力扣題目(一)

    一維動態(tài)規(guī)劃經(jīng)典力扣題目(一)

    目錄 題一:斐波那契數(shù)列 題目二:最低票價 題三:解碼方法 遞歸方法是2的n次方的時間復雜度。 遞歸代碼: 帶有緩存的遞歸,會使時間復雜度得到大幅度優(yōu)化。 時間復雜度為O(n)。 緩存即記錄中間值 ????????優(yōu)化的方法: ????????代碼: ? ? ? ? 代碼:

    2024年02月21日
    瀏覽(22)
  • 計算機競賽 題目:基于LSTM的預測算法 - 股票預測 天氣預測 房價預測

    計算機競賽 題目:基于LSTM的預測算法 - 股票預測 天氣預測 房價預測

    ?? 優(yōu)質(zhì)競賽項目系列,今天要分享的是 基于LSTM的預測算法 - 股票預測 天氣預測 房價預測 該項目較為新穎,適合作為競賽課題方向,學長非常推薦! ?? 更多資料, 項目分享: https://gitee.com/dancheng-senior/postgraduate 時間序列預測是一類比較困難的預測問題。 與常見的回歸預測

    2024年02月07日
    瀏覽(31)
  • 【leetcode 力扣刷題】回文串相關(guān)題目(KMP、動態(tài)規(guī)劃)

    【leetcode 力扣刷題】回文串相關(guān)題目(KMP、動態(tài)規(guī)劃)

    題目鏈接:5. 最長回文子串 題目內(nèi)容: 題目就是要我們找s中的回文子串,還要是最長的。其實想想,暴力求解也行……就是遍歷所有的子串,同時判斷是不是回文串,是的話再和記錄的最大長度maxlen比較,如果更長就更新。時間復雜度直接變成O(n^3)。 優(yōu)化的點在于,假設(shè)子

    2024年02月09日
    瀏覽(27)
  • 題解動態(tài)規(guī)劃:藍橋杯2022國賽B組 題解 A題目

    題解動態(tài)規(guī)劃:藍橋杯2022國賽B組 題解 A題目

    在這組題(藍橋杯C/C++ B組 國賽)里面挑了幾道喜歡的題目,做了一下,筆記思路如下。( 其實是我覺得能做出的題 ) 題目圖片來源于:CSDN 罰時大師月色 請問2022,拆分成10個不同的正整數(shù)有多少種不同的分法。 這道題目,拿到手上的時候,第一個想法是暴力,但是,每次

    2023年04月08日
    瀏覽(22)
  • 7-1 矩陣鏈相乘問題 (20 分)(思路+詳解+題目解析) 動態(tài)規(guī)劃做法

    7-1 矩陣鏈相乘問題 (20 分)(思路+詳解+題目解析) 動態(tài)規(guī)劃做法

    2:關(guān)于本題的矩陣乘法和遞推方程的得出 3:實例演示 三:思路 =================================================================== 思路:這里在考慮的的時候,因為是多個矩陣相乘,求的最小乘法次數(shù), 比如 A1_A2_A3_A4, 那么根據(jù)劃分的不同,那么其乘法順序也會不同,繼而所求的乘法次數(shù)

    2024年04月09日
    瀏覽(50)
  • 解決背包衍生題目:單詞拆分和分割等和子集--動態(tài)規(guī)劃方式深度呈現(xiàn)

    解決背包衍生題目:單詞拆分和分割等和子集--動態(tài)規(guī)劃方式深度呈現(xiàn)

    目錄 139. 單詞拆分 解題思路 代碼實現(xiàn) 416. 分割等和子集 二維動態(tài)規(guī)劃 狀態(tài)壓縮(一維) 問題拓展 背包九講知識總結(jié) 相關(guān)問題 題目描述 給你一個字符串? s ?和一個字符串列表? wordDict ?作為字典。請你判斷是否可以利用字典中出現(xiàn)的單詞拼接出? s ?。 注意: 不要求字典中

    2024年02月03日
    瀏覽(21)
  • 【每日易題】Leetcode上Hard難度的動態(tài)規(guī)劃題目——地下城游戲的實現(xiàn)

    【每日易題】Leetcode上Hard難度的動態(tài)規(guī)劃題目——地下城游戲的實現(xiàn)

    君兮_的個人主頁 即使走的再遠,也勿忘啟程時的初心 C/C++ 游戲開發(fā) Hello,米娜桑們,這里是君兮_,博主最近一直在鉆研動態(tài)規(guī)劃算法,最近在Leetcode上刷題的時候遇到一個Hard難度的動態(tài)規(guī)劃題,今天就借此機會來給大家分享一下我對這個題目的一些看法和解題思路(放心,

    2024年02月05日
    瀏覽(27)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包