837.新 21 点

爱丽丝参与一个大致基于纸牌游戏 “21点” 规则的游戏,描述如下:

爱丽丝以 0 分开始,并在她的得分少于 k 分时抽取数字。 抽取时,她从 [1, maxPts] 的范围中随机获得一个整数作为分数进行累计,其中 maxPts 是一个整数。 每次抽取都是独立的,其结果具有相同的概率。

当爱丽丝获得 k或更多分 时,她就停止抽取数字。

爱丽丝的分数不超过 n 的概率是多少?

与实际答案误差不超过 10-5 的答案将被视为正确答案。

网友代码

class Solution {
public:
    double new21Game(int N, int K, int M) {
        // dp[i]:当前得分为 i 时,最终分数不超过 N 的概率
        double dp[K + M];

        // s:滑动窗口内 dp 值的和,用于 O(1) 计算区间平均
        double s = 0;

        // 初始化 K ~ K+M-1 区间的边界值
        for (int i = K; i < K + M; ++i) {
            // 若 i 不超过 N 则后续一定满足条件,概率为 1;否则为 0
            dp[i] = (i <= N) ? 1.0 : 0.0;
            s += dp[i];
        }

        // 逆序计算 0 ~ K-1 的概率
        for (int i = K - 1; i >= 0; --i) {
            // 从 1~M 中均匀抽取一张牌,求期望概率
            dp[i] = s / M;
            // 滑动窗口:去掉最右端 dp[i+M],加入新的 dp[i]
            s = s - dp[i + M] + dp[i];
        }

        // 返回从 0 分开始游戏,最终得分不超过 N 的概率
        return dp[0];
    }
};

转换思路

求爱丽丝的胜率。她可以从牌面为 [1,M] 的牌中选择任意一张,这张牌是可以无限重复的,也就是说无论她取多少次,每次取到 2(假如 2 在 [1,M] 范围内)的概率都是 1/M;如果她手上牌的总额小于 K,她就会抽牌,大于等于 K 时,就停止抽牌;停止抽牌后,她的牌面小于等于 N 时,她就获胜了,求她获胜的概率。

假设 dp[x] 为她手上牌面为x时,能获胜的概率,那么这个概率应该是: dp[x]=1/M * (dp[x+1]+dp[x+2]+dp[x+3]...+dp[x+M]) 因为抽取的牌面机会都是均等的,她能抽取的面值在 [1,M] 之间,所以将概率之和平均一下就是 dp[x] 的概率。

x 最多能到 K-1,因为当大于等于 K 时,爱丽丝会停止抽牌,所以当游戏结束时,即爱丽丝停止抽牌时,她可能达到的最大牌面是 K+M-1,而一开始她的牌面是 0,所以我们用一个长度为 K+M 的 dp 数组来保存她在所有面值下的胜率。 最后 dp[0],也就是最开始爱丽丝还没有抽牌,她的牌面为 0 时的胜率,这个就是我们的答案。

抖音讲解视频

5.89 01/24 JVY:/ I@V.lc 837.新 21 点 # 每日一题# 算法 # 数据结构 # Leetcode https://v.douyin.com/hmzADkH0ByE/ 复制此链接,打开Dou音搜索,直接观看视频!

哔站讲解视频

【837.新 21 点】 https://www.bilibili.com/video/BV1SzYyzgEwA/?share_source=copy_web&vd_source=9ce5dcc0dc00db11597011753f36587b

<think>好的,我现在需要帮助用户分析他们提供的Xorg日志信息,看看这些是否与图形界面帧率过低有关,并给出解决方案。首先,我需要仔细阅读用户提供的日志条目,逐条理解它们的含义,然后判断哪些可能导致性能问题。 首先,用户给出的日志信息中有几行关键信息: 1. `[II] RADEON(0): Front buffer size: 8100K`:这可能指的是显存的前缓冲区大小,正常情况可能不会直接影响帧率,但需要确认是否有足够的显存分配。 2. `VRAM usage limit set to 216342K`:显存使用限制设置为约216MB,如果应用程序或游戏需要更多显存,这可能导致性能问题,特别是当显存不足时,系统可能会使用较慢的系统内存,从而降低性能。 3. `(==) RADEON(0): DRI3 disabled`:DRI3(Direct Rendering Infrastructure 3)被禁用,而使用较旧的DRI2或没有DRI可能会影响3D加速性能,导致帧率低。 4. `Backing store enabled`:这通常是指X服务器保存屏幕内容以优化刷,一般不会直接导致帧率问题,但需要确认是否有冲突。 5. `(WW) RADEON(0): Direct rendering disabled`:直接渲染被禁用,这会导致应用程序无法直接访问GPU进行硬件加速,严重影响图形性能,如3D应用或游戏会变得非常卡顿。 6. `(II) RADEON(0): Acceleration disabled`:加速功能被禁用,意味着GPU的硬件加速没有开启,所有图形处理都由CPU完成,这肯定会造成帧率低下。 7. `DPMS enabled`和`Silken mouse enabled`:这些通常与电源管理和鼠标指针平滑有关,可能不直接影响帧率。 8. `Option "AccelMethod" is not used`:用户可能尝试设置加速方法但没有生效,或者配置错误。 接下来,我需要将这些信息与帧率低的问题联系起来。关键在于直接渲染和硬件加速被禁用,这会导致GPU无法有效处理图形任务,转而依赖CPU进行软件渲染,性能自然大幅下降。此外,DRI3被禁用可能意味着没有使用最的加速协议,也可能影响性能。显存限制如果设置不当,也可能导致资源不足,尤其是在处理高分辨率或复杂图形时。 解决方案方面,首先需要启用直接渲染和硬件加速。这可能需要修改Xorg的配置文件,通常位于`/etc/X11/xorg.conf`或`/etc/X11/xorg.conf.d/`目录下的某个文件。用户需要检查是否存在针对Radeon驱动的配置,并确保相关选项如`AccelMethod`被正确设置。另外,启用DRI3可能有助于提升性能,需要添加或修改对应的选项。同时,确认显存限制是否合理,根据系统实际显存调整,避免过小导致瓶颈。最后,更驱动程序和系统内核也可能解决兼容性问题,提升性能。 在验证步骤中,用户可以通过命令如`glxinfo | grep "direct rendering"`来检查直接渲染是否已启用,使用`DRI_PRIME=1 glxgears`测试性能是否有改善。如果问题依旧,可能需要更深入的日志分析或尝试其他驱动模式如`amdgpu`。 需要注意的是,不同Linux发行版和硬件配置可能有所差异,用户需根据具体情况调整配置文件,并备份重要数据以防万一。此外,如果用户的显卡较,可能更适合使用amdgpu驱动而非radeon驱动,这也可能带来性能提升。</think>以下是针对您提供的Xorg日志的分析及解决方案: --- ### **关键问题定位** 1. **`Direct rendering disabled`** - **影响**:禁用直接渲染会导致所有图形处理由CPU完成(软件渲染),GPU硬件加速完全失效。这是帧率低的最直接原因。 - **表现**:3D应用/游戏卡顿、窗口拖动延迟、整体界面响应慢。 2. **`Acceleration disabled`** - **影响**:显存和GPU计算单元未被激活,图形操作无法利用硬件加速功能。 - **表现**:视频播放卡顿、桌面特效无法启用。 3. **`DRI3 disabled`** - **影响**:未使用现代的直接渲染接口,可能导致兼容性问题或性能损失。 4. **`VRAM usage limit set to 216342K`** - **潜在风险**:若显存需求超过限制(如高分辨率/多显示器),可能触发内存交换,降低性能。 --- ### **解决方案步骤** #### **1. 启用直接渲染和硬件加速** - **修改Xorg配置文件**: 创建或编辑文件 `/etc/X11/xorg.conf.d/20-radeon.conf`,添加以下内容: ```bash Section "Device" Identifier "Radeon" Driver "radeon" Option "AccelMethod" "glamor" # 启用现代加速方法 Option "DRI" "3" # 强制启用DRI3 Option "ColorTiling" "on" Option "TearFree" "on" # 可选:防止屏幕撕裂 EndSection ``` - **保存后重启X服务**: ```bash sudo systemctl restart display-manager # 根据系统选择gdm/sddm/lightdm等 ``` #### **2. 验证显存限制合理性** - **检查显卡实际显存**: ```bash lspci -v | grep -A10 VGA | grep "Memory" ``` 如果显存远大于`216342K`(约216MB),可能是配置错误。可尝试移除显存限制: ```bash # 在Xorg配置文件中添加 Option "VRAMUsageLimit" "0" # 0表示不限制 ``` #### **3.驱动和内核** - **升级Mesa和内核**(开源驱动关键组件): ```bash sudo apt update && sudo apt install mesa-utils linux-generic # Ubuntu/Debian sudo pacman -S mesa linux # Arch/Manjaro ``` #### **4. 检查是否应切换到`amdgpu`驱动** - **适用条件**: 若显卡为GCN 1.0及以上架构(如HD 7000系列或更),`amdgpu`驱动性能更优。 - **切换方法**: 编辑配置文件,将`Driver "radeon"`改为`Driver "amdgpu"`,并确保已安装`xf86-video-amdgpu`。 --- ### **验证修复效果** 1. **检查直接渲染状态**: ```bash glxinfo | grep "direct rendering" # 正常应显示:direct rendering: Yes ``` 2. **测试GPU加速性能**: ```bash glxgears # 基础测试 DRI_PRIME=1 glxgears # 如果使用双显卡(如核显+独显) ``` 3. **监控显存使用**: ```bash sudo apt install radeontop # Ubuntu/Debian radeontop # 实时查看显存占用和GPU负载 ``` --- ### **可能残留问题** - 若仍存在性能问题,尝试: 1. 禁用合成器(如KWin/Xfwm4)的垂直同步(VSync)。 2. 检查系统日志是否有其他错误: ```bash journalctl -b -p 3 # 查看本次启动后的严重日志 ``` 通过上述步骤应能显著改善图形性能。如问题持续,建议提供完整的`/var/log/Xorg.0.log`以进一步分析。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

然然超绝肌肉线条

你的鼓励将是创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值