洛谷OJ: P1005 矩阵取数游戏

本文介绍了在洛谷上遇到的P1005矩阵取数游戏问题,讨论了如何避免错误的思考方向,聚焦于每一行独立的选择。通过分析,确定了选择起始或结束数字的策略,并建立了状态转移方程。由于数据范围可能超过longlong的限制,采用了大数类来处理。虽然大数类模板代码较长,但其在解决此题中起到了关键作用。
摘要由CSDN通过智能技术生成

今天因为高数模拟考没怎么做题,就睡前做了这么一题,舍友也开始一起在洛谷刷题了,很开心,但是高数只考了63,很不开心,心情复杂。

思路:每一行都是独立的选择,不要因为有多行而被带到错误的思考方向,所以我们开始分析独立的一行数据,那么只有两种选择,1.选择最开头的数字 2.选择最末尾的数字, 而每次增加的分数都是2^i*选择的数字,那么我们稍加思考就可以得到状态转移方程啦。

首先,我们定义dp[i][j]为区间(i,j)可以得到的最大分数那么我们可以得出状态转移方程

dp[i][j] = max{dp[i+1][j]*2+num[i]*2, dp[i][j-1]*2+num[j]*2} (i+1 <= j)

但是通过分析,这题的m给定的数据范围上限是80,也就是说最好的情况也有2^80的大小了!这就超出了longlong的数据大小,所以我们选择用大数类来解决这一题。

因为我的大数类模板有300行左右,太长了,就不放出来了。

#include <iostream>
#include <cstring>
#include <cstdio>
#include <cstdlib>
using namespace std;
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值