zoukankan      html  css  js  c++  java
  • 博弈dp小结

    Codeforces859C

    C. Pie Rules

    题意

    有n个物品,每个物品有不同的价值,物品按顺序分给两个人,有一块令牌,每回合拥有令牌的人拥有物品的分配权,但是该回合未获得物品的那个人会在下回合获得令牌,开始令牌在Bob手里,两个人都采取最优的策略,问最后各能获得的最大价值是多少


    分析

     这种题一看就是dp的套路,dp[i]:表示考虑位置i最佳决策,不难看出,位置i的确定需要(i+1~n)即位置i后面的状态,所以从后往前dp,转移就是:

    不选这个数即直接继承dp[i+1]的最优决策, 还有一个是选择a[i] 即后缀和sum - dp[i+1] + a[i] ,dp[i] = max(dp[i+1], sum - dp[i+1] + a[i] ) 

    最后dp[1]就是Bob的最大价值,sum - dp[1]就是Alice的

    时间复杂度O(n)

    #include<bits/stdc++.h>
    using namespace std;
    
    const int maxn = 1e5 + 10;
    
    int dp[55];
    int a[maxn];
    int sum[maxn];
    
    
    int main()
    {
        int n;
        scanf("%d", &n);
        for(int i = 1; i <= n; i++)
            scanf("%d", &a[i]);
        for(int i = n; i >= 1; i--)
        {
            sum[i] = sum[i+1] + a[i];
            dp[i] = max(dp[i+1], sum[i+1] - dp[i+1] + a[i]);
        }
        printf("%d %d
    ", sum[1]-dp[1], dp[1]);
        return 0;
    }
    View Code

    Arc#085 Arc

    D.ABS

    题意

    给n个数的序列,两个人玩游戏,初始X有Z元,Y有W元,X从前往后先选一个数,Y只能从X选的位置后面选,每个人一旦选了一个数就要把手上扔掉,最后的答案是abs(Z-W)(z,w都是最后的值),X希望答案越大越好,Y希望答案越小越好


    分析

    分析可以看出(猜)出答案,但属于dp可以解决的问题,坑一号


    要么优秀要么生锈
  • 相关阅读:
    开源网站
    Shape 与 InlineShape 的区别
    C#使用Word中的内置对话框实例
    C# Word 类库的深入理解
    C# 线程知识--使用ThreadPool执行异步操作
    C#如何以管理员身份运行程序
    C#的Enum——枚举
    MVC Action 返回类型[转]
    MVC3中Action返回类型ActionResult类型
    ASP.NET MVC 3.0 Controller基础
  • 原文地址:https://www.cnblogs.com/Superwalker/p/7828541.html
Copyright © 2011-2022 走看看