题目链接

看完题可能第一时间并没有清晰的思路。让我们一步一步的来考虑这道题目。

题目中描述操作为每次从所有的行中选取,这样做有些麻烦。仔细思考一下可以发现行与行之间互不干涉,所以我们可以对每行操作到底,最后统计答案。

每行怎么选取当然难不倒聪明的oier了,设f[i][j]表示某行从第i位到第j位的最优答案。

转移如下

  f[i][j]=max((f[i+1][j]+b[i]<<1),(f[i][j-1]+b[j]<<1));


到此,这道题目就做完了。

 #include<cstring>
#include<iostream>
#include<cctype>
#include<cstdio>
#include<algorithm>
#define ll __int128_t
using namespace std;
inline ll read()
{
register ll X=;register char ch=;
for(;!isdigit(ch);ch=getchar());
for(;isdigit(ch);ch=getchar()) X=(X<<)+(X<<)+(ll)ch-'';
return X;
}
inline void write(ll x)
{
if(x>) write(x/);
putchar(x%+'');
}
int n,m;
ll a[][],f[][],ans;
ll work(ll b[])
{
memset(f,,sizeof(f));
for(int l=;l<=m;l++)
for(int i=;i+l<=m;i++)
{
int j=i+l;
f[i][j]=max((f[i+][j]+b[i]<<),(f[i][j-]+b[j]<<));
}
return f[][m];
}
int main()
{
n=read(),m=read();
for(int i=;i<=n;i++)
for(int j=;j<=m;j++)
a[i][j]=read();
for(int i=;i<=n;i++)
ans+=work(a[i]);
write(ans);
}

需要注意的是,这道题目由于数据范围过大需要使用高精度运算,然而在洛谷上是可以用_int128水过去的。

P1005 矩阵取数的更多相关文章

  1. 洛谷P1005 矩阵取数游戏

    P1005 矩阵取数游戏 题目描述 帅帅经常跟同学玩一个矩阵取数游戏:对于一个给定的n*m的矩阵,矩阵中的每个元素aij均为非负整数.游戏规则如下: 1.每次取数时须从每行各取走一个元素,共n个.m次 ...

  2. 洛谷 P1005 矩阵取数游戏

    题目描述 帅帅经常跟同学玩一个矩阵取数游戏:对于一个给定的n*m的矩阵,矩阵中的每个元素aij均为非负整数.游戏规则如下: 1.每次取数时须从每行各取走一个元素,共n个.m次后取完矩阵所有元素: 2. ...

  3. P1005 矩阵取数游戏 区间dp 高精度

    题目描述 帅帅经常跟同学玩一个矩阵取数游戏:对于一个给定的n \times mn×m的矩阵,矩阵中的每个元素a_{i,j}ai,j​均为非负整数.游戏规则如下: 每次取数时须从每行各取走一个元素,共n ...

  4. [NOIP2007] 提高组 洛谷P1005 矩阵取数游戏

    题目描述 帅帅经常跟同学玩一个矩阵取数游戏:对于一个给定的n*m的矩阵,矩阵中的每个元素aij均为非负整数.游戏规则如下: 1.每次取数时须从每行各取走一个元素,共n个.m次后取完矩阵所有元素: 2. ...

  5. P1005 矩阵取数游戏[区间dp]

    题目描述 帅帅经常跟同学玩一个矩阵取数游戏:对于一个给定的\(m*n\)的矩阵,矩阵中的每个元素\(a_{i,j}\)均为非负整数.游戏规则如下: 每次取数时须从每行各取走一个元素,共n个.经过m次后 ...

  6. 【Luogu】P1005矩阵取数游戏(高精度+DP)

    题目链接 yeah终于过辣! DP,f[i][j]表示每行还剩i到j这个区间的数没取的时候的值.借这个题我也把高精度的短板弥补了一下,以后高精加高精乘应该是没问题了. 哇终于不怂高精了…… 放上代码. ...

  7. 洛谷 P1005 矩阵取数游戏 (区间dp+高精度)

    这道题大部分时间都在弄高精度-- 还是先讲讲dp吧 这道题是一个区间dp,不过我还是第一次遇到这种类型的区间dp f[i][j]表示取了数之后剩下i到j这个区间的最优值 注意这里是取了i之前和j之后的 ...

  8. P1005 矩阵取数游戏

    传送门 思路: △ 区间动规 对于每行,有 f [ i ][ j ] 代表取区间 [ i , j ] 的最大值. 然后转移方程我们考虑,对于每一个新的 f [ i ][ j ],有两种情况(下面定义  ...

  9. P1005 矩阵取数游戏(动态规划+高精度)

    题目链接:传送门 题目大意: 给定长度为m的数列aj,每次从两端取一个数,得到2k * aj的价值(k为当前的次数,从1开始到m),总共有n行这样的数列,求最大价值总和. 1 ≤ n, m ≤ 80, ...

随机推荐

  1. jmeter(二十七)分布式压测注意事项

    之前的博客:jemter(二十三):分布式测试简略的介绍了利用jmeter做分布式测试的方法,当时只是介绍了背景和原因,以及基本的配置操作,有同学说写得不够详细. 正好今年双十一,我司的全链路压测,也 ...

  2. js 加密方法Encrypt

    function Encrypt(str, pwd) { if (str == "") return ""; str = escape(str); if (!p ...

  3. C# 特性和索引(C#学习笔记06)

    特性 特性(Attribute)是用于在运行时传递程序中各种元素(比如类.方法.结构.枚举.组件等)的行为信息的声明性标签. 特性可以当成一个特殊的类看待 列举特性语法: [attribute(pos ...

  4. Java的Annnotation (注解)

    注解是什么呢? 其实就像商场的商品上都贴有自己的标签一样,它提供了关于这个商品的许多额外信息.你可以根据这些信息对其进行附加的处理. (Java的语法糖果然比较差劲), 这个name()方法太累赘了, ...

  5. Python进阶----pymysql的安装与使用,mysql数据库的备份和恢复,mysql的事务和锁

    Python进阶----pymysql的安装与使用,mysql数据库的备份和恢复,mysql的事务和锁 一丶安装 pip install PyMySQL 二丶pymysql连接数据库 ### 语法: ...

  6. 换个语言学一下 Golang(14) ——fmt包

    Print() 函数将参数列表 a 中的各个参数转换为字符串并写入到标准输出中. 非字符串参数之间会添加空格,返回写入的字节数. func Print(a ...interface{}) (n int ...

  7. JavaScript设计模式与开发实践随笔(三)

    封装 1. 封装数据 a)      只能依赖变量的作用域来实现封装特性,es6中可以通过symbol创建私有属性 var myObject = (function(){ var __name = ' ...

  8. Qt 使用QLabel、QMovie加载gif图片实现动态等待窗口

    新建基于Widget的应用程序,在ui的窗口中添加QLabel,对象名label,调整整个窗口大小. 准备loading.gif图片  Widget.cpp  12345678910111213141 ...

  9. 单词CAEMENT水泥CAEMENT英文

    caement Archaic spelling of cement. caement Alternative forms caement (archaic) c?ment (archaic) Hyp ...

  10. Win10系统配置Java环境变量

    Win10系统配置Java环境变量 电脑重新装了个系统,又要重新配置JDK环境变量,这里做个记录. 安装JDK后在cmd里运行java会显示找不到指令,这种就是需要添加java的环境变量. 这里我记录 ...