zoukankan      html  css  js  c++  java
  • 【bzoj2091】[Poi2010]The Minima Game dp

    题目描述

    给出N个正整数,AB两个人轮流取数,A先取。每次可以取任意多个数,直到N个数都被取走。
    每次获得的得分为取的数中的最小值,A和B的策略都是尽可能使得自己的得分减去对手的得分更大。
    在这样的情况下,最终A的得分减去B的得分为多少。

    输入

    第一行一个正整数N (N <= 1,000,000),第二行N个正整数(不超过10^9)。

    输出

    一个正整数,表示最终A与B的分差。

    样例输入

    3
    1 3 1

    样例输出

    2


    题解

    dp

    不妨倒着想,设f[i]为剩余前i小的数时先手与后手的最大差值。

    由于先手取完之后后手就变成了先手,所以这个状态对双方都成立。

    于是有f[i]=max{a[j]-f[j-1]}。(后手取到j-1,先手从j开始取)。

    然后维护一个最大值,这里直接用f数组来维护最大值,应该不难理解。

    #include <cstdio>
    #include <algorithm>
    using namespace std;
    int a[1000001] , f[1000001];
    int main()
    {
        int n , i;
        scanf("%d" , &n);
        for(i = 1 ; i <= n ; i ++ )
            scanf("%d" , &a[i]);
        sort(a + 1 , a + n + 1);
        for(i = 1 ; i <= n ; i ++ )
            f[i] = max(f[i - 1] , a[i] - f[i - 1]);
        printf("%d
    " , f[n]);
        return 0;
    }
  • 相关阅读:
    JSP页面
    JSP简介
    常量与变量的声明与使用
    AJAX无刷新上传图片
    JSP连接MySql数据库
    运算符与表达式
    世界级的javascript ajax client端UI库 Ext学习笔记 menu组件 和 toolbar组件
    OOD/OOA基本原则
    Java字符编码转换过程说明
    正则表达式系统教程
  • 原文地址:https://www.cnblogs.com/GXZlegend/p/6401659.html
Copyright © 2011-2022 走看看