CSP-J 2024扑克牌问题:贪心算法的经典应用

深度学习
• 阅读 2

CSP-J 2024扑克牌问题:贪心算法的经典应用 题目重述与分析 给定n张扑克牌,每张牌有分值a_i。玩家轮流取牌,每次可从两端取一张,最终获得取牌分值和。双方均采取最优策略,求先手能获得的最大分数差。

核心考点:

区间DP与博弈论结合

最优子结构性质

记忆化搜索实现

算法设计思路 状态定义:

dp[l][r]表示区间[l,r]内先手能获得的最大分差

转移方程:

dp[l][r] = max(a[l] - dp[l+1][r], a[r] - dp[l][r-1]) 边界条件:

当l=r时,dp[l][r]=a[l]

完整C++实现

#include <iostream>
#include <cstring>
using namespace std;

const int N = 1010;
int a[N], memo[N][N];

int dfs(int l, int r) {
    if (l > r) return 0;
    if (memo[l][r] != -1) return memo[l][r];

    int takeLeft = a[l] - dfs(l+1, r);
    int takeRight = a[r] - dfs(l, r-1);

    return memo[l][r] = max(takeLeft, takeRight);
}

int main() {
    int T;
    cin >> T;
    while (T--) {
        int n;
        cin >> n;
        for (int i = 0; i < n; i++) cin >> a[i];

        memset(memo, -1, sizeof memo);
        cout << dfs(0, n-1) << endl;
    }
    return 0;
}

贪心算法

点赞
收藏
评论区
推荐文章
菜鸟小欧 菜鸟小欧
4年前
扑克牌发牌
间隔2秒发牌且有大小王!coding:utf8importrandomimporttime扑克牌54张pokerxforxinrange(1,55)playerpokers每个花色的组合玩家4人列表forpinrange(1,5):playerp4个花色types'♠','♥'
菜鸟小欧 菜鸟小欧
4年前
Python简易扑克牌发牌
coding:utf8importrandomimporttime扑克牌54张间隔2秒发牌pokerxforxinrange(1,55)pokerxforxinrange(1,55)playerpokers每个花色的组合玩家4人forpinrange(1,5):playerp4个
Stella981 Stella981
3年前
C++ qsort() 函数调用时实参与形参不兼容的问题解决
《剑指OFFER》刷题笔记——扑克牌顺子LL今天心情特别好,因为他去买了一副扑克牌,发现里面居然有2个大王,2个小王(一副牌原本是54张^\_^)...他随机从中抽出了5张牌,想测测自己的手气,看看能不能抽到顺子,如果抽到的话,他决定去买体育彩票,嘿嘿!!“红心A,黑桃3,小王,大王,方片5”,“OhMyGod!”不是顺子.....L
Wesley13 Wesley13
3年前
Java笔试面试题(转载+自己整理)
扑克牌打牌里面经常出现的5张牌,一个顺子带一对,给你五张牌,比如:1,2,2,2,3或者5,6,7,4,4或者2,4,3,5,5或者7,5,9,6,9,这种情况就符合一个顺子带一对,则返回true;反之比如:1,3,4,6,6或者1,5,5,3,4这种返回false,请你在不能使用任何数组原生方法,只能使用循环和赋值的情
贾蔷 贾蔷
5小时前
动态规划实战:洛谷P1220关路灯问题最优解(附C++代码 AC100)
一、问题重述题目描述:在一条笔直的道路上安装了N盏路灯,每盏灯有位置和功率。老张从某起点出发,每秒移动1单位距离,经过的灯可以关闭(节省电量)。要求计算关闭所有灯的最小耗电量。二、算法解析1.问题建模这是一个典型的区间DP问题,需要考虑:位置信息处理耗电量
贾蔷 贾蔷
5小时前
2023年GESP六级题解:洛谷P10108闯关游戏动态规划解法详解
一、题目解读本文针对2023年GESP六级题目“闯关游戏”(洛谷P10108)进行详细解析。题目要求玩家通过不同关卡路径选择,计算从起点到终点的最大得分。关卡间存在跳跃规则,需结合动态规划思想设计高效算法,最终输出最优得分。二、解题思路采用动态规划(Dyn
深度学习 深度学习
5小时前
洛谷P2034题解:动态规划+单调队列优化求解最大K段子段和问题
一、题目解读洛谷P2034题目要求给定一个长度为n的整数数组,将其分成不超过k段,求各段和的最大值。该问题属于经典动态规划问题的扩展,需结合优化技巧高效求解。二、解题思路采用动态规划单调队列优化的策略。核心思想是定义状态dp
菜园前端 菜园前端
1年前
什么是贪心算法?
原文链接:什么是贪心算法?贪心算法是算法设计的一种方法。期盼通过每个阶段的局部最优选择,从而达到全局的最优。但结果不一定是最优的。基础案例场景一零钱兑换现有硬币1元、2元、5元,需要用最少的硬币数量凑够11元。利用贪心算法实现,优先考虑最好的结果就是面值为
贾蔷 贾蔷
2星期前
洛谷P11228地图探险题解(CSP-J 2024真题)
一、题目重述给定n×m的二维矩阵表示探险地图,每个格子可能是:平地('.')障碍物('')起点('S')终点('E')求从起点到终点的最短路径步数,无法到达则输出1。二、核心算法:BFS广度优先搜索选择原因:BFS是解决无权图最短路径问题的最优方案,时间复
贾蔷 贾蔷
5小时前
牛客12576题全解析:动态规划+质因数分解解决跳跃问题
一、题目解读牛客12576题是一道经典的算法题,要求给定起点N和终点M,求解从N到M的最少跳跃次数。题目考察的核心在于路径优化与动态规划思想,需结合数论中的质因数分解技巧,通过合理设计算法降低时间复杂度,避免暴力枚举的指数级耗时。二、解题思路采用“动态规划