lintcode 394+395 游戏博弈

lintcode 394

  • 解题思路: dp
    dp[i]:代表面对i个石子,是否先手必赢。
    dp[i]=(dp[i-1]==false)||(dp[i-2]==false);


    图片.png
class Solution {
public:
    /**
     * @param n: An integer
     * @return: A boolean which equals to true if the first player will win
     */
    bool firstWillWin(int n) {
        vector<bool> dp(n+1);
        if(n==0)
            return false;
        if(n==1||n==2)
            return true;
        dp[0]=false;
        dp[1]=true;
        dp[2]=true;
        for (int i=3;i<=n;i++){
            dp[i]=(dp[i-1]==false)||(dp[i-2]==false);
        }
        return dp[n];
    }
};

lintcode 395

dp[i]: 面对values[i......n-1] 能得到最大的数字差
dp[i]=max(values[i]-dp[i+1],values[i]+values[i+1]-dp[i+2]);


图片.png
class Solution {
public:
    /**
     * @param values: a vector of integers
     * @return: a boolean which equals to true if the first player will win
     */
    bool firstWillWin(vector<int> &values) {
        if(values.empty())
        return true;
        int m=values.size();
        vector<int> dp(m+1,false);
        dp[m]=0;
        for(int i=m-1;i>=0;i--){
            dp[i]=values[i]-dp[i+1];
            if(i<m-1)//not the first one
                dp[i]=max(dp[i],values[i]+values[i+1]-dp[i+2]);
        }
        return dp[0]>=0;
    }
};
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • mean to add the formatted="false" attribute?.[ 46% 47325/...
    ProZoom阅读 3,215评论 0 3
  • LeetCode Dynamic Programming DP 九章DP班归纳: 坐标型DP:保存的是坐标的状态;...
    Deepin_阅读 689评论 0 1
  • 《ijs》速成开发手册3.0 官方用户交流:iApp开发交流(1) 239547050iApp开发交流(2) 10...
    叶染柒丶阅读 5,651评论 0 7
  • 动态规划(Dynamic Programming) 本文包括: 动态规划定义 状态转移方程 动态规划算法步骤 最长...
    廖少少阅读 3,659评论 0 18
  • 原文链接在前端业务开发中,组件化已经成为我们的共识。沉淀和复用组件,是提高开发效率的利器。但在组件复用的过程中,我...
    南方帅阅读 339评论 0 1

友情链接更多精彩内容