`
java-mans
  • 浏览: 11890811 次
文章分类
社区版块
存档分类
最新评论

POJ 1678 I Love this Game!(博弈DP)

 
阅读更多

转载请注明出处,谢谢http://blog.csdn.net/ACM_cxlove?viewmode=contents by---cxlove

题意:有N个数,有一个区间[A,B],第一个人先取一个数,必须在区间内,后一次取必须比第一个数大,而且差值在区间内。问最后两个人取的数的和的差值最大为多少。

http://poj.org/problem?id=1678

后面的人取的肯定要比前面的人取的要大,那么先排序,就可以依次取。

我们用记忆化搜索,dp[m]表示如果先手取了第m个数,可以达到的最大分差。

那么最后一次取的分差就是本身。

枚举第一个人取的数,必须在区间内。


#include<iostream>
#include<cstdio>
#include<ctime>
#include<cstring>
#include<algorithm>
#include<cstdlib>
#include<vector>
#define C    240
#define TIME 10
#define inf 1<<25
#define LL long long
using namespace std;
int num[10005],n,t,a,b;
int dp[10005];
int DP(int m){
    if(dp[m]!=-inf)
        return dp[m];
    int ans=inf;
    for(int i=m+1;i<n;i++){
        //对方是尽可能取差值大的,所以差值是尽可能小
        //或者写成ans=max(ans,DP(i))
        //最后再用num[m]-ans
        if(num[i]-num[m]>=a&&num[i]-num[m]<=b)
             ans=min(ans,num[m]-DP(i));
    }
    if(ans==inf)
        return dp[m]=num[m];
    return dp[m]=ans;
}
int slove(){
    int ans=-inf;
    for(int i=0;i<n;i++)
        if(num[i]>=a&&num[i]<=b)
             ans=max(ans,DP(i));
    return ans==-inf?0:ans;
}
int main(){
    scanf("%d",&t);
    while(t--){
        scanf("%d%d%d",&n,&a,&b);
        for(int i=0;i<n;i++){
            dp[i]=-inf;
            scanf("%d",&num[i]);
        }
        sort(num,num+n);
        printf("%d\n",slove());
    }
    return 0;
}


分享到:
评论

相关推荐

    POJ1027-The Same Game

    【标题】"POJ1027 - The Same Game"是一个经典的编程竞赛题目,源自北京大学的在线编程平台POJ(Problem Online Judge)。该题目主要考察的是动态规划和矩阵链乘法的知识,要求参赛者编写程序解决一个具有策略性的...

    博弈论小结by xaphoenix

    例子部分,如poj1678 "I Love this Game!",是一个动态规划问题,玩家需要寻找最大得分。hdu3863 "No Gambling"是一个先手必胜的游戏,通过建立正确的策略,先手可以确保获胜。而hdu1079 "Calendar Game"和hdu1564 ...

    POJ1753-Flip Game

    北京大学在线编程平台POJ(Problemset Online Judge)中的题目POJ1753——“Flip Game”,就是一个很好的锻炼逻辑思维和算法设计的实例。本篇文章将对这个问题进行深入解析,并提供两种不同的解决方案:一种基于广度...

    poj dp总结,动态规划分类

    ### poj dp总结:动态规划分类 #### 概述 动态规划(Dynamic Programming,简称DP)是一种在计算机科学和数学中广泛使用的算法策略,用于解决最优化问题。它通过将复杂问题分解为较简单的子问题来求解,并利用这些...

    poj 1191 经典dp 源代码

    根据标题“poj 1191 经典dp 源代码”和描述中的信息,可以推测此题目是一个经典的动态规划问题。题目要求通过划分一个二维矩阵为多个不重叠的矩形区域,使得每个矩形区域的平均值与整体平均值之差的平方和最小。这个...

    POJ1005-I Think I Need a Houseboat

    【标题】"POJ1005-I Think I Need a Houseboat" 是一个编程竞赛题目,源自北京大学的在线评测系统POJ(Problem Set of Peking University)。这个题目旨在考验参赛者的算法设计和实现能力,主要涉及数据结构和动态...

    poj 3342(树状dp)

    ### Poj 3342 (树状DP) #### 题目背景 这是一道典型的树状动态规划问题,来源于POJ平台编号为3342的题目。题目描述了一个公司的组织结构,并提出了一种特定场景下的最优解求法。 #### 题目解析 在题目描述中提到...

    POJ题解及题目分类

    4. "1678 I Love this Game 解题报告.doc" 和 "1858 LiHaoyuan Interesting Maze Game.doc":同样,这些是游戏或迷宫类问题的解题报告,可能涉及路径搜索或状态空间搜索算法。 5. "1705_Generational Replacement....

    poj 1240 Pre-Post-erous!.md

    poj 1240 Pre-Post-erous!.md

    Poj动态规划题目列表

    状态转移方程为`dp_max[i] = max(dp_max[i-1]*a[i], dp_min[i-1]*a[i], a[i])` 和 `dp_min[i] = min(dp_max[i-1]*a[i], dp_min[i-1]*a[i], a[i])`。 #### 3. POJ 1143 - Number Game - **题目描述**:有两个玩家...

    POJ1015-Jury Compromise【动态规划DP】

    【标题】"POJ1015-Jury Compromise" 是一个编程竞赛题目,主要涉及的是动态规划(Dynamic Programming, 简称DP)的算法应用。动态规划是一种解决复杂问题的有效方法,它通过将问题分解成子问题,并存储子问题的解来...

    POJ3080-Blue Jeans

    这里,dp[i-1][j]表示不购买第i种裤子的最小花费,而dp[i][j-p[i]] + m[i]表示购买第i种裤子的最小花费。最终,我们寻找dp[n][k],即购买k种不同裤子的最低总花费。 【标签】"POJ 3080 Blue Jeans" 指明了这道题目...

    poj 1005 I Think I Need a Houseboat

    I Think I Need a Houseboat Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 41126 Accepted: 16537 Description Fred Mapper is considering purchasing some land in Louisiana to build his ...

    poj2775.rar_poj_poj 27_poj27_poj2775

    标签"poj poj_27 poj27 poj2775"进一步确认了这是一道关于POJ平台的编程挑战,其中"poj_27"可能是表示第27类问题或者某种分类,而"poj27"可能是对"poj2775"的简写。 压缩文件中的"www.pudn.com.txt"可能是一个链接...

    poj 3901 The Computer Game.md

    poj 3901 The Computer Game.md

    POJ2996-Help Me with the Game

    【标题】"POJ2996-Help Me with the Game"是一道源自北京大学在线判题系统POJ的编程竞赛题目。这道题目的主要目标是编写程序来解决一个特定的游戏策略问题,要求参赛者具备扎实的算法基础和编程能力。 【描述】...

    poj2342AC代码

    poj2342,树形dp,dp[i][0]表示i不参加party,其下属(包括非直接下属)能得到的最优值。dp[i][1]表示i参加的其下属和他能得到的最优值。

    poj_dp分类

    ### poj_dp分类解析 #### 概述 在本篇文章中,我们将深入探讨并解析PoJ (Pacific Ocean Judger) 平台上与动态规划(Dynamic Programming, DP)相关的题目分类及其特征。通过这些题目,读者可以更好地理解动态规划的...

    POJ算法题目分类

    * 型如下表的简单 DP:型如下表的简单 DP 是指解决问题的简单 DP 算法,如 poj3267、poj1836、poj1260、poj2533。 * 计算几何学:计算几何学是指解决问题的计算几何学算法,如 poj2031、poj1039。 六、数学 数学...

    poj题目分类

    * 类型 DP:例如 poj3267、poj1836、poj1260、poj2533。 中级 1. 基本算法: * C++的标准模版库的应用:例如 poj3096、poj3007。 * 较为复杂的模拟题的训练:例如 poj3393、poj1472、poj3371、poj1027、poj2706...

Global site tag (gtag.js) - Google Analytics