1. 程式人生 > >取數比最大博弈題:判斷是否必勝

取數比最大博弈題:判斷是否必勝

題意:一個數組,從左往右取數,A和B輪流取數,每次只能取1或者2個,最後和大的獲勝,A先取,問是否必勝。



解法:從後往前推: dp【i】表 先手相對後手的最優值(), dp[i] = max (v[i]-dp[i+1] , v[i]+v[i+1]-dp[i+2]  )  最後判斷是否大於0即可。



再看類似leetcode 486. Predict the Winner , 改為每次 可以從最左或者從最右取一個。

類似想法,這次直接遞迴狀態:
class Solution {
public:
    vector<int> v;
    
    int f(int i, int j)
    {
        if(i==j)
            return v[i];
        
        int a=f(i+1,j);
        int b=f(i,j-1);
        
        if(v[i]-a>=v[j]-b)
        {
            return v[i]-a;
        }
        else 
            return v[j]-b;
    }
    bool PredictTheWinner(vector<int>& nums)   //f(i,j)表示從[i,j]區間 先手相對於後手的最優值
    {
        v=nums;
        if(f(0,nums.size()-1)>=0)
            return 1;
        return 0;
    }
};




相關推薦

博弈判斷是否必勝

題意:一個數組,從左往右取數,A和B輪流取數,每次只能取1或者2個,最後和大的獲勝,A先取,問是否必勝。 解法:從後往前推: dp【i】表 先手相對後手的最優值(), dp[i] = max (

輪流收益遊戲

ron pre ret 個人 pri 一個 splay 技術分享 aps 有一個整數串,有兩個人輪流取,每次可以取走一個前綴或後綴。兩人都足夠聰明,且都會使自己收益最大。求取完後先手收益。 import numpy as np from random import

HDU 1565 方格(1)(點權獨立集)

題目大意:給你一個n*n的格子的棋盤,每個格子裡面有一個非負數。 從中取出若干個數,使得任意的兩個數所在的格子沒有公共邊,就是說所取的數所在的2個格子不能相鄰,並且取出的數的和最大。 解題思路:最大點權獨立集,關鍵是怎麼建圖了,我們可以採用染色的思想對這張圖

方格(2)(點權獨立集)

Problem Description 給你一個m*n的格子的棋盤,每個格子裡面有一個非負數。 從中取出若干個數,使得任意的兩個數所在的格子沒有公共邊,就是說所取數所在的2個格子不能相鄰,並且取出的數的和最大。 Input 包

[hdu1569]方格(2) 點權獨立集

題目大意:給你一個m*n的格子的棋盤,每個格子裡面有一個非負數。從中取出若干個數,使得任意的兩個數所在的格子沒有公共邊,就是說所取數所在的2個格子不能相鄰,並且取出的數的和最大。 我們首先將棋盤染成二色圖(相鄰點顏色不同),再將它想象成二分圖。 設立一個超級源點與超級

二維

www apply http cti length mat 需要 -i turn //取二維數組最大值 var test=[[1,34],[456,2,3,44,234],[4567,1,4,5,6],[34,78,23,1]]; //1. junior

51nod 1270 組的代價 思路簡單動態規劃

i++ for end names bits image using idt color 這題是看起來很復雜,但是換個思路就簡單了的題目。 首先每個點要麽取b[i],要麽取1,因為取中間值毫無意義,不能增加最大代價S。 用一個二維數組做動態規劃就很簡單了。 d

codeforces 892A - Greed - [超級大水][O(n)和次]

class 不出 volume clas spa sca bit vol pri 題目鏈接:https://cn.vjudge.net/problem/CodeForces-892A Jafar has n cans of cola. Each can is describ

麒麟 980 透視照流出Android 強 CPU 主角之一的 NPU 反成

  每次有新的旗艦 SoC 發表時,我們都非常期待能夠了解其架構設計。10 月,TechInsights 公佈了蘋果 A12 處理器的透視照片,我們得以瞭解這款 7 奈米晶片內在的邏輯電路設計。8 日,外媒 ChipRebel 發表了華為 Mate 20 手機的拆解,並公佈了麒麟 980 處理

30、劍指offer--連續子

動態 計算機 i++ 初始 pre reat urn eat 開完 題目描述 HZ偶爾會拿些專業問題來忽悠那些非計算機專業的同學。今天測試組開完會後,他又發話了:在古老的一維模式識別中,常常需要計算連續子向量的最大和,當向量全為正數的時候,問題很好解決。但是,如果向量中包含

js Math [ 隨機數、絕對值、四舍五入、進一整、舍去整、值、小值、圓周率 ]

pre 最大 abs 取整 dom tran 絕對值 rip math <script> /* 數學對象:Math */ with (document) { write(‘<br>-3.5的絕

【左神算法課】子差值小於某閾值,求滿足條件的子組個數

isempty all turn main .com color 子數組 sys ems 題目描述:    解法思路:   本題其實是滑動窗口的變形。主體思路為:   1.從第一個元素開始依次向後遍歷,同時維護兩個窗口(由於要同時操作窗口的頭部和尾部,故采用雙端隊

Tingq 模糊查詢 共多少條、小、平均、求和值 升、降序

string sys post nat sender type asp idt acl 頁面代碼 <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default3.aspx.cs" Inherits="

51nod 2006 飛行員配對(二分圖匹配) 裸匈牙利算法 求二分圖匹配

spa 解法 tor != cto == 遇到 由於 include 題目: 題目已經說了是最大二分匹配題, 查了一下最大二分匹配題有兩種解法, 匈牙利算法和網絡流。 看了一下覺得匈牙利算法更好理解, 然後我照著小紅書模板打了一遍就過了。 匈牙利算法:先試

C#編程入門--求小值

mar static span int color turn [] return cnblogs 工具類如下: public class ArrayHelper { #region Double數組最大值 ///

值小的值?

etsec set ack public 參數 util eset 包裝 ret package com.demo; import java.util.Arrays;import java.util.List;import java.util.TreeSet; public

並發連接會話的區別

信息流 quest web頁面 所有 含義 連接 不同 能夠 bsp 最大並發連接數和最大會話數的區別 學習了:https://zhidao.baidu.com/question/585571574096800085.html 最大並發連接數和最大會話數的區別: 1、最大

Linux中進程文件數

second nice AI pre 添加記錄 cde sys 前言 over 前言 Linux系統中可以設置關於資源的使用限制,比如:進程數量,文件句柄數,連接數等等。 在日常的工作中應該遇到過: -bash: fork: retry: Resource tempora

獲取

sof turn length 接受 數組 創建 span 步驟 for /** * 任務:獲取數組最大值 * @param 創建arr 接受一個元素為int類型的數組 * @return 返回該數組中最大元素*/public class GetMax {//創建類 p

值,小值

color min cal bsp this max AS IV 最大 Math.max.apply(this,[120,129,56,34,98]) //129 Math.max.call(this,120,129,56,34,98) //129 Math.min.