寻宝游戏 HDU - 6289 (DP)

2023-11-20

小Q最近迷上了一款寻宝游戏,这款游戏中每局都会生成一个n×mn×m的网格地图,从上往下依次编号为第11行到第nn行,从左往右依次编号为第11列到第mm列。每个格子上都有不同数量的金币,第ii行第jj列的格子上的金币数量为ai,jai,j。 

小Q一开始位于(1,1)(1,1),每次他可以往右或者往下走,每当他经过某个格子时,他就可以拿走这个格子上的所有金币。小Q不能走出这个地图,当小Q不能再行动时,游戏结束。显然当且仅当小Q位于(n,m)(n,m)时,游戏才会结束。 

一轮游戏的得分为这一轮中收集到的金币总量,而在游戏开始前,因为小Q是超级VIP用户,所以他有kk次机会交换某两个格子中的金币数。这kk次机会不一定要用完,请写一个程序帮助小Q在一轮内拿到尽可能多的金币。

Input

第一行包含一个正整数T(1≤T≤10)T(1≤T≤10),表示测试数据的组数。 

每组数据第一行包含三个整数n,m,k(2≤n,m≤50,0≤k≤20)n,m,k(2≤n,m≤50,0≤k≤20),分别表示地图的长宽以及交换的次数。 

接下来nn行,每行mm个整数ai,j(0≤ai,j≤106)ai,j(0≤ai,j≤106),依次表示每个格子中金币的数量。

Output

对于每组数据,输出一行一个整数,即能收集到的金币数量的最大可能值。

Sample Input

2
3 4 0
1 2 3 4
9 8 7 6
5 4 7 2
5 5 1
9 9 9 0 0
0 0 9 0 0
0 0 0 0 0
0 0 9 0 0
9 0 9 9 9

Sample Output

34
81
#include<iostream>
using namespace std;
inline bool cmp(int x,int y){
    return x>y;
}
const int max1=55;
const int max2=25;
const int inf=0x3f3f3f3f;
int n,m,k;
int dp[max1][max1][max2][max2];
int a[max1][max1];
int tot;
int b[max1];
int main(){
    int t;
    cin>>t;
    while(t--){
        memset(dp,-0x3f,sizeof(dp));
        cin>>n>>m>>k;
        for(int i=0;i<n;i++) for(int j=0;j<m;j++) cin>>a[i][j];
        dp[0][0][0][0]=a[0][0];
        dp[0][0][0][1]=0;
        for(int i=0;i<n;i++){
            for(int j=0;j<m;j++){
                if(i==0&j==0) continue;
                tot=0;
                if(i) for(int y=j+1;y<m;y++) b[tot++]=a[i-1][y];
                for(int x=0;x<j;x++) b[tot++]=a[i][x];
                sort(b,b+tot,cmp);
                for(int used=0;used<=k;used++){
                    for(int bal=0;bal<i+j+1&&bal<=k;bal++){
                        int ans=-inf;
                        if(i){
                            ans=max(ans,dp[i-1][j][used][bal]+a[i][j]);
                            if(bal) ans=max(ans,dp[i-1][j][used][bal-1]);
                            int sum=0;
                            int it=0;
                            for(int cntuse=1;cntuse<=k&&cntuse<=tot;cntuse++){
                                sum+=b[it++];
                                ans=max(ans,dp[i-1][j][used-cntuse][bal]+sum+a[i][j]);
                                if(bal) ans=max(ans,dp[i-1][j][used-cntuse][bal-1]+sum);
                            }
                        }
                        if(j){
                            ans=max(ans,dp[i][j-1][used][bal]+a[i][j]);
                            if(bal) ans=max(ans,dp[i][j-1][used][bal-1]);
                        }
                        dp[i][j][used][bal]=ans;
                    }
                }
            }
        }
        int ans=0;
        for(int i=0;i<=k;i++){
            ans=max(ans,dp[n-1][m-1][i][i]);
        }
        cout<<ans<<endl;
    }
    return 0;
}

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

寻宝游戏 HDU - 6289 (DP) 的相关文章

  • Codeforce 题目621C Wet Shark and Flowers(期望)

    C Wet Shark and Flowers time limit per test 2 seconds memory limit per test 256 megabytes input standard input output st
  • c++求行列式的值(全排列法)

    用全排列的方式求行列式的值 递归体现在全排列中 上代码 f函数是求行列式的值 include
  • C++11 string与int转换

    int num stoi 4651 string str to string 1234
  • 剑指offer——矩形覆盖问题

    题目描述 我们可以用2 1的小矩形横着或者竖着去覆盖更大的矩形 请问用n个2 1的小矩形无重叠地覆盖一个2 n的大矩形 总共有多少种方法 思路一 深度优先搜索 从 0 0 开始遍历 判断此格子情况 判断能否竖着放 横着放 把所有情况试探一遍
  • 蓝桥 BASIC-23

    include
  • 算法刷题【一本通YbtOJ1488】新的开始

    异想之旅 本人原创博客完全手敲 绝对非搬运 全网不可能有重复 本人无团队 仅为技术爱好者进行分享 所有内容不牵扯广告 本人所有文章仅在CSDN 掘金和个人博客 一定是异想之旅域名 发布 除此之外全部是盗文 先说句题外话 这个标题我很喜欢 种
  • 蓝桥杯基础试题汇总

    目录 1 试题 基础练习 A B问题 2 数列问题 3 试题 基础练习 十六进制转八进制 4 试题 基础练习 十六进制转十进制 5 试题 基础练习 十进制转十六进制 6 试题 基础练习 序列求和 7 试题 基础练习 圆的面积 8 试题 基础
  • 关于C++中unsigned类型

    我们知道c 中的long long 也知道c 里long long有符号 unsigned long long和long long的区别就在于 1 unsigned long long 没有符号 表示范围是0到264 1 2 long lo
  • 代码随想录算法训练营day1~18总结

    时间 空间复杂度 解题过程中运用的函数补充说明 数组 day1 http t csdn cn dBSgY day2 http t csdn cn JTDvH 数组总结 链表 day3 http t csdn cn mJx9V day4 ht
  • leetcode刷题(10.8总结)

    1 移除链表元素 题目描述 https leetcode cn problems remove linked list elements class Solution def removeElements self head ListNod
  • 代码随想录算法训练营第一天

    数组理论基础 文章链接 代码随想录 记忆 数组是存放在连续内存空间上的相同类型数据的集合 数组下标都是从0开始的 数组内存空间的地址是连续的 数组的元素是不能删的 只能覆盖 在C 中二维数组是连续分布的 像Java是没有指针的 同时也不对程
  • leetcode 142题 环形链表找入环点 python js解法

    题目 给定一个链表的头节点 head 返回链表开始入环的第一个节点 如果链表无环 则返回 null 如果链表中有某个节点 可以通过连续跟踪 next 指针再次到达 则链表中存在环 为了表示给定链表中的环 评测系统内部使用整数 pos 来表示
  • 排序函数c++函数模板实现

    冒泡排序 插入排序 选择排序 归并排序 快排 堆排序 冒泡排序 插入排序 选择排序 这种简单的时间复杂度是O n2 归并排序 快排 堆排序时间复杂度O nlogn include
  • 02.07_两个链表相交

    给你两个单链表的头节点 headA 和 headB 请你找出并返回两个单链表相交的起始节点 如果两个链表没有交点 返回 null 解法一 如果两个链表有相交 那么从后面看一定是相同的 所以只需要把长的移动到和短的链表一样的长度开始遍历即可
  • leetcode刷题(9.24总结)

    1 相交链表 题目描述 https leetcode cn problems intersection of two linked lists class Solution def getIntersectionNode self head
  • leetcode刷题(10.15总结)

    1 2的幂 题目描述 https leetcode cn problems power of two class Solution def isPowerOfTwo self n int gt bool return n gt 0 and
  • HDU-2000

    题目本身不难 但是对于初学者 难的是数据的读入 方法一 使用getchar 去除每一行的空格符 include
  • PTA L2-008 最长对称子串 (25 分) 字符串处理

    暴力循环 从j处向左右延伸 对称就继续延伸 注意 对称有两种 abccba abcba include
  • 栈之中缀表达式转后缀表达式

    题目描述 就是把我们平常写的运算表达式换成另外一种表达式 运算符前面两个数字执行相关操作 用图说明一下 比如3 2 gt 3 2 比如3 3 2 gt 3 3 2 再比如 3 3 2 2 3 gt 3 3 2 2 3 程序设计思路 特殊情况
  • 代码随想录算法训练营第二十四天|理论基础 77. 组合

    理论基础 其实在讲解二叉树的时候 就给大家介绍过回溯 这次正式开启回溯算法 大家可以先看视频 对回溯算法有一个整体的了解 题目链接 文章讲解 代码随想录 视频讲解 带你学透回溯算法 理论篇 回溯法精讲 哔哩哔哩 bilibili 77 组合

随机推荐

  • Python 常用基础模块(四):sys模块

    目录 一 sys模块介绍 1 1 什么是 Python 解释器 说明 1 2 sys 模块的作用 二 常用方法及属性介绍 2 1 modules属性 将模块名称映射到已加载模块的字典 2 2 getdefaultencoding 方法 获取
  • YOGA 14s开机黑屏——试试提高亮度

    联想yoga 14s 开始动画是有的 但开机动画后就黑屏了 折腾了半天 按下亮度增大键后屏幕亮了 好像联想笔记本比较支持亮度最低即为0
  • 一周简报(项目尾声)

    XX海油项目已经进入尾声 大部分的工作都已经完成 目前我们所做的就是完善系统中的Bug 以及面对客户提出的某些部分的需求变更 由于形式所迫 我们的战斗由 城市 转入 农村 由 地上 转入 地下 由 阵地战 转为 游击战 我们当前的任务是以客
  • 通过源码包*.src.rpm定制开发rpm

    为什么80 的码农都做不了架构师 gt gt gt 1 基本流程 1 下载 安装相应的src rpm包 wget xxx src rpm rpm ivh xxx src rpm 这里的 安装 是指把xxx src rpm中的tar gz p
  • 活动报名

    活动议程 日期 5月5日 周五 时间 主题 14 30 14 35 开场简介 袁洋 清华大学交叉信息学院助理教授 青源会会员 14 35 15 20 环境不变最小二乘回归 方聪 北京大学智能学院助理教授 青源会会员 15 20 15 50
  • 计算机网络分组交换特点,分组交换技术在计算机网络技术中的作用及特点是什么?...

    分组交换是以分组为单位进行传输和交换的 它是一种存储 转发交换方式 即将到达交换机的分组先送到存储器暂时存储和处理 等到相应的输出电路有空闲时再送出 采用存储转发的分组交换技术 实质上是在计算机网络的通信过程中动态分配传输线路或信道带宽的一
  • Android中实现全屏、无标题栏的两种办法(另附Android系统自带样式的解释)

    在进行UI设计时 我们经常需要将屏幕设置成无标题栏或者全屏 要实现起来也非常简单 主要有两种方法 配置xml文件和编写代码设置 1 在xml文件中进行配置 在项目的清单文件AndroidManifest xml中 找到需要全屏或设置成无标题
  • c++ 二进制、八进制、十进制、十六进制相互转换

    itoa 和strtol 可以实现二进制 八进制 十进制 十六进制之间的相互转换 包含在 inculde lt cstdlib gt 1 十进制转换为其他进制 使用itoa int dec char str int R 将十进制数dec转换
  • python执行JavaScript代码

    1 简单使用 import execjs execjs eval new Date 返回值为 2018 04 04T12 53 17 759Z execjs eval Date now 返回值为 1522847001080 需要注意的是返回
  • selenium 获取属性值的两种方法

    初衷是因为要通过属性值判断是否按钮是否disabled 获取属性值的两种方法 1 通过js获取 class text dr execute script return arguments 0 getAttribute class TAG a
  • 关于“service iptables save“的“命令只支持LSB动作”的报错解决方法

    1 报错复现 service iptables save 报错如图 2 解决方式 2 1 先停止防火墙 systemctl stop firewalld 2 2 执行 yum install y iptables service 执行完毕后
  • 四路服务器销售排名,专注企业核心业务 新华三四路服务器2019上半年销售额占比持续增长...

    近日 IDC发布的 2019年第二季度中国x86服务器市场跟踪报告 显示 2019年上半年 紫光旗下新华三集团四路服务器在中国市场销售额排名第二 市场份额环比大幅增长 从中国市场销销售额数据来看 2018年下半年 新华三集团四路服务器市场销
  • QT实现多线程,以及子线程调用主线程方法与变量

    实现思路 第一步需要将子线程声明为主线程的友元类 第二步是将主线程类对象的地址通过信号槽传递给子线程中创建的对象 使得子线程能访问主线程的数据的 1 子线程 displayresult h 头文件 伪代码 include tabwindow
  • 算法学习——贪心算法之币种统计

    算法描述 币种统计 单位给每一位员工发工资 精确到元 为了保证不临时换零钱 使得每个员工取款的张数最少 在取工资前统计所有员工所需要的各种票面的张数 约定票种为100 50 20 10 5 2 1元 并验证币种统计是否正确 算法思路 算法描
  • MySQL MVCC详解

    为什么需要MVCC 在没有MVCC之前 是使用读写锁 共享锁 排它锁 来进行并发控制的 读锁和读锁之间不互斥 写锁和读锁互斥 写锁和写锁互斥 但是频繁加锁会导致数据库性能低下 这时出现了一种不加锁来解决读写冲突的方法 它会让数据库维护每条数
  • xshell设置代理连接

    大致原理 本地服务器Local gt 中转服务器Jump gt 目标服务器Destination 本机L连接不上目标服务器D 通过中转服务器提供的代理 来实现连接 所以启动顺序 先启动中转J 不能断开连接 再启动目标服务D 中转服务器设置
  • 电大计算机应用基础实操题模块4,计算机应用基础形考模块四答案

    计算机应用基础形考模块四答案Tag内容描述 1 精品文档计算机应用基础01试卷总分 10001任务单选题 共20题 共100分 开始说明 结束说明 1 5分 Excel工作表中 用鼠标器左键单击某个工作表标签 该标签为白色显示 此工作表称为
  • 前端页面跳转带token-骚操作

    声明 非必要不要使用该方法 会有存在一些问题 在此只是提供思路 发现存在的问题 1 使用window location reload 会有问题 window attr location url 会有问题 F5 刷新页面会有问题 这里可以进行
  • GPU编程 CUDA C++ 线性代数求解器 cuSolver库

    cuSolver库较cuBLAS库更为高级 其能处理矩阵求逆 矩阵对角化 矩阵分解 特征值计算等问题 cuSolver库的实现是基于cuBLAS库和cuSPARSE库这两个基本库 cuSolver库的功能类似于Fortran中的LAPACK
  • 寻宝游戏 HDU - 6289 (DP)

    小Q最近迷上了一款寻宝游戏 这款游戏中每局都会生成一个n mn m的网格地图 从上往下依次编号为第11行到第nn行 从左往右依次编号为第11列到第mm列 每个格子上都有不同数量的金币 第ii行第jj列的格子上的金币数量为ai jai j 小