[NOIP2007 提高组] 矩阵取数游戏

devtools/2025/1/17 11:21:20/

[NOIP2007 提高组] 矩阵取数游戏

显示标签 

 题目讨论 题目统计 全部提交

时间限制:C/C++ 1000MS,其他语言 2000MS
内存限制:C/C++ 256MB,其他语言 512MB
难度:提高+/省选-
分数:100 

描述

帅帅经常跟同学玩一个矩阵取数游戏:对于一个给定的 n×m 的矩阵矩阵中的每个元素 ai,j​ 均为非负整数。游戏规则如下:

  1. 每次取数时须从每行各取走一个元素,共 n 个。经过 m 次后取完矩阵内所有元素;
  2. 每次取走的各个元素只能是该元素所在行的行首或行尾;
  3. 每次取数都有一个得分值,为每行取数的得分之和,每行取数的得分 = 被取走的元素值 ×2i,其中 i 表示第 i 次取数(从 1 开始编号);
  4. 游戏结束总得分为 m 次取数得分之和。

帅帅想请你帮忙写一个程序,对于任意矩阵,可以求出取数后的最大得分。

输入描述

输入文件包括 n+1 行:

第一行为两个用空格隔开的整数 n 和 m。

第 2∼n+1 行为 n×m 矩阵,其中每行有 m 个用单个空格隔开的非负整数。

输出描述

输出文件仅包含 1 行,为一个整数,即输入矩阵取数后的最大得分。

用例输入 1 

2 3
1 2 3
3 4 2

用例输出 1 

82

提示

【数据范围】

对于 60% 的数据,满足 1≤n,m≤30,答案不超过 1016。
对于 100% 的数据,满足 1≤n,m≤80,0≤ai,j​≤1000。

来源

NOIP 2007 提高第三题。

代码代码代码代码代码代码代码代码代码代码代码代码代码代码代码

#include<bits/stdc++.h>using namespace std;
const int base = 10000;
int n, m;
int a[100];
struct hi_pres {int len, nums[110];hi_pres() {memset(nums, 0, sizeof(nums));len = 0;}
};
hi_pres ans, pow_2[1000], dp[100][100];
int getlen(const hi_pres & a) {for (int i = 100; i >= 0; i--) {if (a.nums[i]) {return i;}}return 0;
}
hi_pres operator + (const hi_pres & a,const hi_pres & b) {int la = getlen(a);int lb = getlen(b);hi_pres c;for (int i = 1; i <= max(la, lb); i++) {c.nums[i] += a.nums[i] + b.nums[i];c.nums[i + 1] += c.nums[i] / base;c.nums[i] %= base;}getlen(c);return c;
}
hi_pres operator * (const hi_pres & a,const int & b) {int la = getlen(a);hi_pres c;for (int i = 1; i <= la; i++) {c.nums[i] += a.nums[i] * b;c.nums[i + 1] += c.nums[i] / base;c.nums[i] %= base;}getlen(c);return c;
}
hi_pres max(const hi_pres & a,const hi_pres & b) {int la = getlen(a), lb = getlen(b);if (la > lb) return a;if (la < lb) return b;for (int i = la; i >= 1; i--) {if (a.nums[i] > b.nums[i]) return a;if (a.nums[i] < b.nums[i]) return b;}return a;
}
void print(const hi_pres a) {int la = getlen(a);printf("%d", a.nums[la]);for (int i = la - 1; i >= 1; i--) {if (a.nums[i] == 0) printf("0000");else if (a.nums[i] < 10) printf("000%d", a.nums[i]);else if (a.nums[i] < 100) printf("00%d", a.nums[i]);else if (a.nums[i] < 1000) printf("0%d", a.nums[i]);else printf("%d", a.nums[i]);}
}
int main() {scanf("%d%d", & n, & m);pow_2[0].len = 1;pow_2[0].nums[1] = 1;for (int i = 1; i <= 100; i++) {pow_2[i] = pow_2[i - 1] * 2;}for (int i = 1; i <= n; i++) {memset(dp, 0, sizeof(dp));for (int j = 1; j <= m; j++) {scanf("%d", & a[j]);}for (int k = 1; k <= m; k++) {for (int l = m; l >= k; l--) {dp[k][l] = max(dp[k][l], dp[k - 1][l] + pow_2[m - l + k - 1] * a[k - 1]);dp[k][l] = max(dp[k][l], dp[k][l + 1] + pow_2[m - l + k - 1] * a[l + 1]);}}hi_pres maxx;for (int k = 1; k <= m; k++) {maxx = max(maxx, dp[k][k] + pow_2[m] * a[k]);}ans = ans + maxx;}print(ans);return 0;
}
//~~~


http://www.ppmy.cn/devtools/151260.html

相关文章

【Sharding-JDBC学习】读写分离_shardjdbc5 不支持 shardingdatasource

8.读写分离 8.1 理解读写分离 面对日益增加的系统访问量&#xff0c;数据库的吞吐量面临着巨大瓶颈。 对于同一时刻有大量并发读操作和较少写操作类型的应用系统来说&#xff0c;将数据库拆分为主库和从库&#xff0c;主库负责处理事务性的增删改操作&#xff0c;从库负责处理…

【计算机网络】lab8 DNS协议

&#x1f308; 个人主页&#xff1a;十二月的猫-CSDN博客 &#x1f525; 系列专栏&#xff1a; &#x1f3c0;计算机网络_十二月的猫的博客-CSDN博客 &#x1f4aa;&#x1f3fb; 十二月的寒冬阻挡不了春天的脚步&#xff0c;十二点的黑夜遮蔽不住黎明的曙光 目录 1. 前言 2.…

PyTorch框架——基于深度学习YOLOv11神经网络路面坑洞检测系统

基于深度学习YOLOv11神经网络路面坑洞检测系统&#xff0c;其能识别路面坑洞&#xff0c;见如下 第一步&#xff1a;YOLOv11介绍 YOLOv11是由Ultralytics公司开发的新一代目标检测算法&#xff0c;它在之前YOLO版本的基础上进行了显著的架构和训练方法改进。以下是YOLOv11的一…

带头双向循环链表(数据结构初阶)

文章目录 双向链表链表的分类概念与结构实现双向链表定义链表结构链表打印判空申请结点初始化头插尾插头删尾删查找指定位置插入和删除销毁链表 顺序表和链表的分析结语 欢迎大家来到我的博客&#xff0c;给生活来点impetus&#xff01;&#xff01; 这一节我们学习双向链表&a…

root后如何隐藏环境?

很多小伙伴在给手机root之后以为就大功告成啦&#xff01;其实你要做的才刚刚开始&#xff0c;很多安全性强的软件会侦查出你手机里的root&#xff0c;进而限制部分功能或直接拒绝你的访问。今天我来教大家一些常见的隐藏环境的方法以及步骤&#xff0c;希望对大家有帮助。 方…

做跨境电商服务器用什么宽带好?

做跨境电商服务器用什么宽带好&#xff1f;做跨境电商服务器&#xff0c;推荐选择光纤宽带或高性能的5G网络。光纤宽带高速稳定&#xff0c;适合处理大量数据和实时交互&#xff1b;5G网络则提供超高速移动连接&#xff0c;适合需要灵活性和移动性的卖家。具体选择需根据业务规…

Dual Split A2dp SBC Streams

背景 SBC是经典蓝牙A2DP强制支持的音频标准配置的codec&#xff0c;通常情况下&#xff0c;在我们的印象中SBC是蓝牙低质量音质的代名词&#xff0c;如果一个耳机或者音响只支持SBC一个codec&#xff0c;那么这个耳机或音响肯定是低端货&#xff0c;一般高端的人耳机都会支持一…

uniapp 小程序 textarea 层级穿透,聚焦光标位置错误怎么办?

前言 在开发微信小程序时&#xff0c;使用 textarea 组件可能会遇到一些棘手的问题。最近我在使用 uniapp 开发微信小程序时&#xff0c;就遇到了两个非常令人头疼的问题&#xff1a; 层级穿透&#xff1a;由于 textarea 是原生组件&#xff0c;任何元素都无法遮盖住它。当其…