【每日一题】7月10日精讲—矩阵取数游戏

来源:牛客网:

文章目录

    • 题目描述
    • 题解:
    • 代码:

时间限制:C/C++ 1秒,其他语言2秒
空间限制:C/C++ 262144K,其他语言524288K
64bit IO Format: %lld

题目描述

帅帅经常跟同学玩一个矩阵取数游戏:对于一个给定的n*m的矩阵,矩阵中的每个元素aij均为非负整数。游戏规则如下:
1.每次取数时须从每行各取走一个元素,共n个。m次后取完矩阵所有元素;
2.每次取走的各个元素只能是该元素所在行的行首或行尾;
3.每次取数都有一个得分值,为每行取数的得分之和,每行取数的得分 = 被取走的元素值 * 2i,其中i表示第i次取数(从1开始编号);
4.游戏结束总得分为m次取数得分之和。 帅帅想请你帮忙写一个程序,对于任意矩阵,可以求出取数后的最大得分。

输入描述:

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

输出描述:

输出一个整数,即输入矩阵取数后的最大得分。

示例1
输入
复制

2 3
1 2 3
3 4 2

输出
复制

82

说明
第1次:第1行取行首元素,第2行取行尾元素,本次得分为1 * 21 + 2 * 21 = 6
第2次:两行均取行首元素,本次得分为2 * 22 + 3 * 22 = 20
第3次:得分为3 * 23 + 4 * 23 = 56。
总得分为6 + 20 + 56 = 82
示例2
输入
复制

1 4
4 5 0 5

输出
复制

122

示例3
输入
复制

2 10
96 56 54 46 86 12 23 88 80 43
16 95 18 29 30 53 88 83 64 67

输出
复制

316994

备注:
60%的数据满足:1 ≤ n, m ≤ 30, 答案不超过1016
100%的数据满足:1 ≤ n, m ≤ 80, 0 ≤ aij ≤ 1000

题解:

每一行都进行的相同操作,且每一行的操作都互不影响,所以我们可以一行一行的考虑,算出每一行的最佳情况然后求和
这样就降低难度维度
先看第一行,只能在行首行尾取,如果我们要知道区间[1,m]的最佳情况,就要知道[1,m-1]和[2,n]的最优解,因为是由他俩推过去的,依次类推
dp[i][j]表示i到j区间的最优解
dp[i][j]=min(dp[i+1][j]+2k *a[i] ,dp[i][j-1] +2k *a[j])
由内向外扩展的过程
区间长度为n时k取1,长度每缩短一次k++,(相当于第k次取)

因为我们乘以2是依次增多的,所以每次都乘以2
本题是需要高精度的,当然也可以使用__int128 +快读快输 (黑魔法

代码:

#include<bits/stdc++.h>
using namespace std;
#define  _t __int128
inline _t read()
{_t x=0,f=1;char ch=getchar();while(ch<'0'||ch>'9'){if(ch=='-')f=1;ch=getchar();}while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}return x*f;
}
inline void put(_t x)
{if(x<0){putchar('-');x=-x;}if(x>9)put(x/10);putchar(x%10+'0');
}
_t n,m,res;
_t a[103][103],dp[103][104];
_t cul(_t b[])
{for(_t len=1;len<=m;len++){for(_t l=1,r=l+len-1;r<=m;l++,r=l+len-1){dp[l][r]=max(dp[l+1][r]+b[l],dp[l][r-1]+b[r]);dp[l][r]=2*dp[l][r];}} return dp[1][m];
}
int main()
{n=read(),m=read();for(int i=1;i<=n;i++)for(int j=1;j<=m;j++)a[i][j]=read();for(int i=1;i<=n;i++){memset(dp,0,sizeof(dp));res+=cul(a[i]);}put(res);return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/319761.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【dfs】民生问题(2011特长生 T4)

题目大意 有n个问题&#xff0c;m个人&#xff0c;每个人可以解决一些问题&#xff0c;问最少选多少个人可以解决所有问题 解题思路 如果一个人解决的问题被别的人包括&#xff0c;那么可以把这个人丢掉 对于一个问题只能由一个人解决&#xff0c;那么直接选这个人 然后枚举…

张善友:自由之精神,中国之队长

张善友&#xff0c;毕业于兰州大学数学系&#xff0c;2006年开始连任微软最有价值专家&#xff08;MVP&#xff09;&#xff0c;一直在社区宣导.NET开源项目&#xff0c;从早期的Mono到.NET Core&#xff0c;在社区被尊称为张队长&#xff0c;在腾讯工作11年后&#xff0c;进行…

CF461D-Appleman and Complicated Task【并查集】

正题 题目链接:https://www.luogu.com.cn/problem/CF461D 题目大意 n∗nn*nn∗n的网格需要填上xxx或ooo&#xff0c;其中有kkk个格子已经固定&#xff0c;求有多少中填写方案使得每个格子的四周都有偶数个ooo。 解题思路 约束条件相当于一个格子周围的异或和都为000&#xff…

工科数学分析无穷级数总结

目录序言一.常数项级数概念1. 什么是常数项无穷级数&#xff1f;2. 级数的收敛性与和两个特别的级数级数的判别方法①常数项级数判别法②正项级数的审敛准则③变号级数的审敛准则④绝对收敛二.函数项级数概念1. 什么是函数项级数&#xff1f;2. 函数项级数处处收敛与和函数一致…

dump解析入门-用VS解析dump文件进行排障

突然有一天部署在服务器的一个应用挂掉了&#xff0c;没办法只能进入服务器打开【事件查看器】查看下&#xff0c;好不容易找到了打开后一脸懵逼事件查看器查到的内容根本对我们排障没有任何作用。在这个时候如果有对应的dump文件就能派上用场了&#xff0c;只要有dump文件就能…

关于__int128高精度运算

参考文章 使用__int128可以实现高精度运算&#xff0c;但是这种大整数无法使用函数printf输出结果&#xff0c;所以需要手写输出 #include <bits/stdc.h> using namespace std; inline __int128 read() {__int128 x0,f1;char chgetchar();while(ch<0||ch>9){if(ch…

【树链剖分】Disruption P(luogu 4374)

正题 luogu 4374 题目大意 给你一棵树&#xff0c;还有若干边&#xff0c;每条边有一定代价&#xff0c;问你删掉树中的每条边后&#xff0c;使其成为连通图的最小代价 解题思路 不难发现&#xff0c;一条边只对两个端点在树中的路径上的边有贡献&#xff08;即删去树中的这…

P4831-Scarlet loves WenHuaKe【组合数学】

正题 题目链接:https://www.luogu.com.cn/problem/P4831 题目大意 n∗mn*mn∗m的网格上放置2n2n2n个炮&#xff0c;要求互不能攻击。 数据满足n≤m≤2000n\leq m\leq 2000n≤m≤2000或n≤m≤105n\leq m\leq 10^5n≤m≤105且m−n≤10m-n\leq 10m−n≤10 解题思路 每行每列最多…

AtCoder Beginner Contest 172总结

A-calc 直接按照题目输出就行 #include<iostream> using namespace std; int main() {ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);int a;cin>>a;cout<<aa*aa*a*a<<endl;return 0;}B-Minor Change 题中默认肯定能够从S替换到T那么直接不相…

一起开心2020暑假训练第二周 图论(模板题)

比赛链接&#xff1a; 文章目录A HDU 1285 一B HDU 1863 起C POJ 2387 开D POJ 1502 心E HDU 5922 图F HDU 2112 论A HDU 1285 一 拓扑排序模板题&#xff0c;记录每个点的入度&#xff0c;然后按照入度大小以及顺序进行输出 #include<iostream> #include<queue>…

.NET Core部署中你不了解的框架依赖与独立部署

作者&#xff1a;依乐祝原文地址&#xff1a;https://www.cnblogs.com/yilezhu/p/9703460.htmlNET Core项目发布的时候你有没有注意到这两个选项呢&#xff1f;有没有纠结过框架依赖与独立部署到底有什么区别呢&#xff1f;如果有的话那么这篇文章可以参考下&#xff01;为什么…

【树链剖分】旅游(luogu 3976)

正题 luogu 3976 题目大意 给你一棵树&#xff0c;每个点有一个权值s 现在给你一条路径&#xff0c;让你选择两个点x,y&#xff0c;使y在x后面&#xff0c;且sy−sxs_y-s_xsy​−sx​最大 然后该路劲上所有点权值加v 解题思路 树链剖分 在线段树上维护从左到右和从右到左…

P7276-送给好友的礼物【dp】

正题 题目链接:https://www.luogu.com.cn/problem/P7276?contestId39577 题目大意 nnn个点的一棵树&#xff0c;kkk个关键点&#xff0c;两个人从根出发分别走一段路径回到根。要求每个关键点至少被一个人经过&#xff0c;求最短时间。 解题思路 相当于求两个覆盖所有关键点…

dump文件解析之探索.Net的内存

前言&#xff1a;对于需要长时间运行的.net程序&#xff0c;有时需要我们查看内存的使用有没有内存泄露问题。我们可以从dump文件中找到答案。Dump的看点用dump文件来分析内存&#xff0c;到底我们需要关心哪些点呢&#xff1f;内存的使用情况 HeapSize/object的数量 也就是托管…

Codeforces Round #654 (Div. 2)

A.Magical Sticks 贪心凑长度为nnn的木棒 #define IO ios::sync_with_stdio(false);cin.tie();cout.tie(0) #include<iostream> #include<algorithm> using namespace std; int n; int main() {IO;int T;cin>>T;while(T--){cin>>n;cout<<(n1)/…

P3307-[SDOI2013]项链【Burnside引理,莫比乌斯反演,特征方程】

正题 题目链接:https://www.luogu.com.cn/problem/P3307 题目大意 nnn个珠子的一个环形项链&#xff0c;每个珠子有三个1∼k1\sim k1∼k的整数。 两个珠子不同当且仅当它们不能通过翻转或者旋转得到两个项链不同当且仅当它们不能通过旋转得到珠子要求上面的数字互质项链要求相…

【树链剖分】Milk Visits G(luogu 5838)

正题 luogu 5838 题目大意 给你一棵树&#xff0c;和若干查询&#xff0c;每次查询一条路径上是否有点的权值为x 解题思路 离线处理&#xff0c;每次将树上权值为x的点附上1的值&#xff0c;然后询问就是求和&#xff0c;查询完后清零 代码 #include<cstdio> #includ…

2020牛客暑期多校训练营(第二场)

2020牛客暑期多校训练营&#xff08;第二场&#xff09; 最烦英语题 文章目录A All with PairsB BoundaryC Cover the TreeD DurationE Exclusive ORF Fake MaxpoolingG Greater and GreaterH Happy TriangleI IntervalJ Just ShuffleK Keyboard FreeA All with Pairs B Bound…

鸿蒙 - arkTs:状态管理

状态 State&#xff1a; 在声明式UI中&#xff0c;以状态驱动视图更新 状态&#xff08;State&#xff09;&#xff1a;指驱动视图更新的数据&#xff08;被装饰器标记的变量&#xff09;视图&#xff08;View&#xff09;&#xff1a;基于UI描述渲染得到的用户界面 使用示例…

微软发布Azure Pipelines,开源项目可无限制使用CI/CD

微软发布了Azure Pipelines&#xff0c;他们新的CI/CD服务&#xff0c;是Azure DevOps产品的一部分。Azure Pipelines可用于构建、测试和部署工作负载&#xff0c;并可以让各种语言、项目类型和平台协同工作。作为Visual Studio Team Services&#xff08;VSTS&#xff09;的后…