zoukankan      html  css  js  c++  java
  • 洛谷 P3507 [POI2010]GRA-The Minima Game

    题目描述

    Alice and Bob learned the minima game, which they like very much, recently.

    The rules of the game are as follows.

    A certain number of cards lies on a table, each inscribed with a positive integer.

    The players make alternate moves, Alice making the first one.

    A move consists in picking an arbitrary positive number of cards from the table.

    For such move the player receives a number of points equal to the minimum of the numbers inscribed on the cards he collected.

    The game ends when the last card is removed from the table.

    The goal of each player is maximizing the difference between their and their opponent's score.

    Alice and Bob have duly noted that there is an optimal strategy in the game.

    Thus they are asking you to write a program that, for a given set of cards, determines the outcome of the game when both players play optimally.

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

    输入输出格式

    输入格式:

     

    In the first line of the standard input there is one integer  () given, denoting the number of cards.

    The second line holds  positive integers  (), separated by single spaces, that are inscribed on the cards.

     

    输出格式:

     

    Your program should print out a single line with a single integer to the standard output - the number of points by which Alice wins over Bob, assuming they both play optimally; if it is Bob who has more points, the result should be negative.

     

    输入输出样例

    输入样例#1:
    3
    1 3 1
    输出样例#1:
    2
    思路:

    f[i]表示剩下了1..i这个前缀的max(先手-后手)。

    枚举先手决策,f[i]=max(a[j]-f[j-1])

    #include<cstdio>
    #include<cstring>
    #include<iostream>
    #include<algorithm>
    using namespace std;
    int n,ans,num[1000001];
    int main(){
        scanf("%d",&n);
        for(int i=1;i<=n;i++)    scanf("%d",&num[i]);
        sort(num+1,num+1+n);
        for(int i=1;i<=n;i++)
            if(ans<num[i]-ans)
                ans=num[i]-ans;
        printf("%d",ans);
    }
    细雨斜风作晓寒。淡烟疏柳媚晴滩。入淮清洛渐漫漫。 雪沫乳花浮午盏,蓼茸蒿笋试春盘。人间有味是清欢。
  • 相关阅读:
    [JNA系列]Java调用Delphi编写的Dll之Delphi与JAVA基本数据类型对比
    JSON和数据集互相转换单元
    Windows管理多个java版本--解决'has value '1.8',but'1.7' is required'的方法
    Spring+SpringMVC+MyBatis+Maven框架整合
    让你的程序通过XP防火墙
    内存共享【Delphi版】
    自学k8s-安装docker特定版本技巧
    自学k8s-k8s集群环境搭建
    自学k8s-安装过程为下载flannel.yml和镜像文件,而需要设置的代理
    Centos开放指定端口命令
  • 原文地址:https://www.cnblogs.com/cangT-Tlan/p/7562911.html
Copyright © 2011-2022 走看看