中文亚洲精品无码_熟女乱子伦免费_人人超碰人人爱国产_亚洲熟妇女综合网

當(dāng)前位置: 首頁 > news >正文

個人網(wǎng)站可以做資訊小說類網(wǎng)絡(luò)優(yōu)化工程師是做什么的

個人網(wǎng)站可以做資訊小說類,網(wǎng)絡(luò)優(yōu)化工程師是做什么的,越秀網(wǎng)站建設(shè)推廣,關(guān)鍵詞seo服務(wù)文章目錄 一、遞歸二、區(qū)間動態(tài)規(guī)劃 LeetCode&#xff1a;486. 預(yù)測贏家 一、遞歸 注意到本題數(shù)據(jù)范圍為 1 < n < 20 1<n<20 1<n<20&#xff0c;因此可以使用遞歸枚舉選擇方式&#xff0c;時間復(fù)雜度為 2 20 1024 ? 1024 1048576 1.05 1 0 6 2^{20…

文章目錄

  • 一、遞歸
  • 二、區(qū)間動態(tài)規(guī)劃

LeetCode:486. 預(yù)測贏家
在這里插入圖片描述

一、遞歸

注意到本題數(shù)據(jù)范圍為 1 < = n < = 20 1<=n<=20 1<=n<=20,因此可以使用遞歸枚舉選擇方式,時間復(fù)雜度為 2 20 = 1024 ? 1024 = 1048576 = 1.05 × 1 0 6 2^{20} = 1024*1024=1048576=1.05 × 10^6 220=1024?1024=1048576=1.05×106。

對于每一個先手都有兩種選擇方式,我們對該選擇方式進行枚舉。

我們定義遞歸函數(shù) p r e d i c t predict predict表示玩家1在當(dāng)前選擇的情況下是否可以勝利,注意到每個玩家的玩法都會使他的分?jǐn)?shù)最大化,因此對于玩家2的選擇,如果存在一個選擇使得玩家1輸,那么該情況下玩家1都不能勝利(只要玩家2選擇讓自己贏的情況,那么玩家1就不能贏了)。但是對于玩家1的選擇,存在一個選擇能贏就算可以贏。
在這里插入圖片描述

class Solution {
public:bool predictTheWinner(vector<int>& nums) {return predict(nums, 0, (int) nums.size() - 1, 0, 0, 0);}
private:bool predict(vector<int> & nums, int left, int right, int player, int score_1, int score_2){if(left > right){if(score_1 >= score_2) return true;else return false;}if(player == 0){//玩家一,存在一個贏就算贏了if(predict(nums, left + 1, right, player ^ 1, score_1 + nums[left], score_2)) return true;if(predict(nums, left, right - 1, player ^ 1, score_1 + nums[right], score_2)) return true;}else{//玩家二,存在一個玩家二贏,則玩家一必輸。if(predict(nums, left + 1, right, player ^ 1, score_1, score_2 + nums[left]) &&predict(nums, left, right - 1, player ^ 1, score_1, score_2 + nums[right])) return true;}return false;}
};

二、區(qū)間動態(tài)規(guī)劃

注意到這里是從大的數(shù)組中選擇,讓數(shù)組依次減小,我們也可以從數(shù)組小的開始轉(zhuǎn)移到大數(shù)組,因為當(dāng)小數(shù)組確定時,大數(shù)組也能確定。

我們可以定義 d p 1 [ i ] [ j ] [ p l a y e r ] dp1[i][j][player] dp1[i][j][player]表示在選擇數(shù)組 [ i , j ] [i,j] [i,j]時, p l a y e r player player先手時,玩家1的分?jǐn)?shù);類似的有 d p 2 [ i ] [ j ] [ p l a y e r ] dp2[i][j][player] dp2[i][j][player]

則有狀態(tài)轉(zhuǎn)移:

//玩家1先手dp1[i][j][0] = max(dp1[i + 1][j][1] + nums[i], dp1[i][j - 1][1] + nums[j]);if(dp1[i + 1][j][1] + nums[i] >= dp1[i][j - 1][1] + nums[j]){dp2[i][j][0] = dp2[i + 1][j][1];if(dp1[i + 1][j][1] + nums[i] == dp1[i][j - 1][1] + nums[j])dp2[i][j][0] = min(dp2[i + 1][j][1], dp2[i][j - 1][1]);}else{dp2[i][j][0] = dp2[i][j - 1][1];}
//玩家2先手dp2[i][j][1] = max(dp2[i + 1][j][0] + nums[i], dp2[i][j - 1][0] + nums[j]);if(dp2[i + 1][j][0] + nums[i] >= dp2[i][j - 1][0] + nums[j]){dp1[i][j][1] = dp1[i + 1][j][0];if(dp2[i + 1][j][0] + nums[i] == dp2[i][j - 1][0] + nums[j])dp1[i][j][1] = min(dp1[i + 1][j][0], dp1[i][j - 1][0]);}else{dp1[i][j][1] = dp1[i][j - 1][0];}

時間復(fù)雜度: O ( N 2 ) O(N^2) O(N2)
在這里插入圖片描述

class Solution {
public:bool predictTheWinner(vector<int>& nums) {vector<vector<array<int, 2>>> dp1(nums.size(), vector<array<int, 2>>(nums.size(), array<int, 2>{}));vector<vector<array<int, 2>>> dp2(nums.size(), vector<array<int, 2>>(nums.size(), array<int, 2>{}));for(int i = 0; i < nums.size(); ++ i){dp1[i][i][0] = nums[i];dp2[i][i][1] = nums[i];}for(int k = 1; k < nums.size(); ++ k){for(int i = 0; k + i < nums.size(); ++ i){int j = i + k;//玩家1先手dp1[i][j][0] = max(dp1[i + 1][j][1] + nums[i], dp1[i][j - 1][1] + nums[j]);if(dp1[i + 1][j][1] + nums[i] >= dp1[i][j - 1][1] + nums[j]){dp2[i][j][0] = dp2[i + 1][j][1];if(dp1[i + 1][j][1] + nums[i] == dp1[i][j - 1][1] + nums[j])dp2[i][j][0] = min(dp2[i + 1][j][1], dp2[i][j - 1][1]);}else{dp2[i][j][0] = dp2[i][j - 1][1];}//玩家2先手dp2[i][j][1] = max(dp2[i + 1][j][0] + nums[i], dp2[i][j - 1][0] + nums[j]);if(dp2[i + 1][j][0] + nums[i] >= dp2[i][j - 1][0] + nums[j]){dp1[i][j][1] = dp1[i + 1][j][0];if(dp2[i + 1][j][0] + nums[i] == dp2[i][j - 1][0] + nums[j])dp1[i][j][1] = min(dp1[i + 1][j][0], dp1[i][j - 1][0]);}else{dp1[i][j][1] = dp1[i][j - 1][0];}}}return dp1[0][(int) nums.size() - 1][0] >= dp2[0][(int) nums.size() - 1][0];}
};

簡化代碼:(這個代碼過了)

簡化邏輯:玩家1先手,那么玩家1效益最大,玩家2應(yīng)該效益要最低。
但這個邏輯感覺存在一定問題,因為玩家1先手,玩家1想要自己的效益最大,這個時候玩家2的效益是跟玩家1的選擇有關(guān)的,因為棋局完全根據(jù)玩家1來決定。所以一開始我并沒有直接使用min求解后手。

class Solution {
public:bool predictTheWinner(vector<int>& nums) {vector<vector<array<int, 2>>> dp1(nums.size(), vector<array<int, 2>>(nums.size(), array<int, 2>{}));vector<vector<array<int, 2>>> dp2(nums.size(), vector<array<int, 2>>(nums.size(), array<int, 2>{}));for(int i = 0; i < nums.size(); ++ i){dp1[i][i][0] = nums[i];dp2[i][i][1] = nums[i];}for(int k = 1; k < nums.size(); ++ k){for(int i = 0; k + i < nums.size(); ++ i){int j = i + k;//玩家1先手dp1[i][j][0] = max(dp1[i + 1][j][1] + nums[i], dp1[i][j - 1][1] + nums[j]);dp2[i][j][0] = min(dp2[i + 1][j][1], dp2[i][j - 1][1]);//玩家2先手dp2[i][j][1] = max(dp2[i + 1][j][0] + nums[i], dp2[i][j - 1][0] + nums[j]);dp1[i][j][1] = min(dp1[i + 1][j][0], dp1[i][j - 1][0]);}}return dp1[0][(int) nums.size() - 1][0] >= dp2[0][(int) nums.size() - 1][0];}
};
http://www.risenshineclean.com/news/51535.html

相關(guān)文章:

  • 2017做那個網(wǎng)站能致富惠州seo關(guān)鍵字排名
  • 做彩平的材質(zhì)網(wǎng)站優(yōu)質(zhì)友情鏈接
  • c 網(wǎng)站開發(fā)的優(yōu)點建設(shè)網(wǎng)站推廣
  • 企業(yè)網(wǎng)站建站技術(shù)seo網(wǎng)絡(luò)營銷外包公司
  • 個人建網(wǎng)站的費用百度搜索引擎官網(wǎng)入口
  • 網(wǎng)站建設(shè)南陽seo外包公司報價
  • 做網(wǎng)站客戶一般會問什么問題寧波seo外包推廣排名
  • 有哪些比較好的外貿(mào)網(wǎng)站seo推廣計劃
  • 網(wǎng)站建設(shè)企業(yè)建站要求seo的優(yōu)化原理
  • 南昌網(wǎng)站開發(fā)多少錢杭州seo公司
  • 仿xss網(wǎng)站搭建個人網(wǎng)站制作
  • 西安網(wǎng)站開發(fā)哪家好教育機構(gòu)加盟
  • 石家莊網(wǎng)站建設(shè)培訓(xùn)班2022真實新聞作文400字
  • 網(wǎng)站網(wǎng)頁的收錄數(shù)量好的競價賬戶托管外包
  • 從網(wǎng)絡(luò)營銷角度做網(wǎng)站seo外包服務(wù)方案
  • 任丘網(wǎng)站優(yōu)化網(wǎng)站推廣名詞解釋
  • 免費ppt成品網(wǎng)站上海百度seo網(wǎng)站優(yōu)化
  • 北流建設(shè)局網(wǎng)站seo網(wǎng)站關(guān)鍵詞優(yōu)化工具
  • 一站式服務(wù)是什么意思網(wǎng)址和網(wǎng)站的區(qū)別
  • 上海 網(wǎng)站備案系統(tǒng)windows優(yōu)化大師會員兌換碼
  • 小程序開發(fā)費用計入什么科目seo服務(wù)商技術(shù)好的公司
  • 安康網(wǎng)站建設(shè)公司最新推廣注冊app拿傭金
  • 保健品網(wǎng)站設(shè)計短視頻營銷案例
  • 做戒指網(wǎng)站的logo照片想做個網(wǎng)絡(luò)推廣
  • 深圳做網(wǎng)站公司 南山廊坊百度推廣電話
  • 淘寶客網(wǎng)站備案信息百度指數(shù)有什么作用
  • 網(wǎng)站怎么做跳轉(zhuǎn)鏈接最近新聞今日頭條
  • 什么網(wǎng)站可以查建筑工程項目怎么在百度上發(fā)布信息廣告
  • 好用的代碼網(wǎng)站百度推廣優(yōu)化師是什么
  • 東莞常平二手房價最新消息重慶seo1