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

news2024/9/23 15:32:32

题目描述

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

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

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

输入格式

输入文件包括 n+1n+1 行:

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

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

输出格式

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

输入数据 1

2 3
1 2 3
3 4 2

Copy

输出数据 1

82

Copy

数据范围与约定

对于 60\%60% 的数据,满足 1\le n,m\le 301≤n,m≤30,答案不超过 10^{16}1016。 对于 100\%100% 的数据,满足 1\le n,m\le 801≤n,m≤80,0\le a_{i,j}\le10000≤ai,j​≤1000。

NOIP 2007 提高组 第三题

变更记录

因本题原题与P0769 字符串的展开重复

本题更换为# [NOIP2007提高组] 矩阵取数游戏 

代码:

#include <cstdio>
#include <cstring>
#include <iostream>
using namespace std;
struct dzs{
    int ws,li[20];
};
int a[81][81],n,m;
dzs f[2][81][81][81],er[81],an,ans,pss1,pss2;
dzs gjc(int p1,dzs p2){   //高精乘单精
    for(int i=1;i<=p2.ws;i++)
    p2.li[i]*=p1;
    for(int i=1;i<=p2.ws+5;i++){
        if(i>p2.ws&&p2.li[i]!=0)p2.ws=i;
        if(p2.li[i]>9999)p2.li[i+1]+=p2.li[i]/10000,p2.li[i]%=10000;
    }
    return p2;
}
dzs gjj(dzs p1,dzs p2){   //高精加
    dzs p3;memset(p3.li,0,sizeof(p3.li));p3.ws=1;
    for(int i=1;i<=max(p1.ws,p2.ws);i++)
    p3.li[i]=p2.li[i]+p1.li[i];
    for(int i=1;i<=p2.ws+5;i++){
        if(i>p3.ws&&p3.li[i]!=0)p3.ws=i;
        if(p3.li[i]>9999)p3.li[i+1]+=p3.li[i]/10000,p3.li[i]%=10000;
    }
    return p3;
}
dzs maxd(dzs p1,dzs p2){  //取大数
    if(p1.ws>p2.ws)return p1;
    if(p2.ws>p1.ws)return p2;
    for(int i=p1.ws;i>=1;i--){
        if(p1.li[i]>p2.li[i])return p1;
        if(p1.li[i]<p2.li[i])return p2;
    }
    return p1;
}
int print(dzs p1){
    for(int i=p1.ws;i>=1;i--){
        if(i==p1.ws){
            cout<<p1.li[i];continue;
        }
        if(p1.li[i]<10)cout<<"000";
        else if(p1.li[i]<100)cout<<"00";
        else if(p1.li[i]<1000)cout<<"0";
        cout<<p1.li[i];
    }
}
int main(){
    cin>>n>>m;
    for(int i=1;i<=n;i++)
    for(int j=1;j<=m;j++)
    cin>>a[i][j];
    er[1].li[1]=2;er[1].ws=1;
    for(int i=2;i<=m;i++){
        er[i]=gjc(2,er[i-1]);
    }//计算2^i(gao jing)
    for(int k=1;k<=n;k++)//第k行
    for(int i=1;i<=m;i++){//第i次取数
        for(int j=1;j<=i;j++){
            f[0][k][i][j]=gjj(maxd(f[0][k][i-1][j-1],f[1][k][i-1][m-(i-j)+1]),gjc(a[k][j],er[i]));
        }
        for(int j=m-i+1;j<=m;j++){
            f[1][k][i][j]=gjj(maxd(f[1][k][i-1][j+1],f[0][k][i-1][i-(m-j+1)]),gjc(a[k][j],er[i]));
        }
    }
    memset(ans.li,0,sizeof(ans.li));ans.ws=1;
    for(int k=1;k<=n;k++){
        an.ws=1;memset(an.li,0,sizeof(an.li));
        for(int i=1;i<=m;i++){
            an=maxd(an,f[0][k][m][i]);
            an=maxd(an,f[1][k][m][i]);
        }
        ans=gjj(ans,an);
    }
    print(ans);
    cout<<endl;
    return 0;
}

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

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

相关文章

Kafka 入门到起飞系列 - 到底什么是再平衡?谁来执行再平衡呢?什么是组协调器呢?

再平衡&#xff08;Rebalance&#xff09; 本质上是一种协议&#xff0c;规定了一个消费组中所有消费者如何达成一致来分配订阅主题的每个分区 其实就是建立分区和消费者映射关系的这么一个过程&#xff0c;最终主题下的一个分区只会分配给一个消费者 比如有10个分区&#xff…

个人博客系统 -- 登录页面添加图片验证码

目录 1. 功能展示 2. 前段代码 3. 后端代码 1. 功能展示 在登录页面添加验证码登录 1. 检测到没有输入验证码或者输入的验证码错误时,进行弹窗提示.并且刷新当前验证码图片 2. 点击验证码进行刷新 2. 前段代码 1. 添加验证码标签,在密码的下面,在login.html进行修改 主要…

多模态预训练 + 自监督学习 + 下游任务介绍

预训练 1&#xff09;特征提取要解决的问题是怎么分别量化文字和图像&#xff0c;进而送到模型学习? 特征抽取&#xff1a; 文本&#xff1a;倾向于bert等大模型 图像&#xff1a;神经网络&#xff0c;VIT等 2&#xff09;特征融合要解决的问题是怎么让文字和图像的表征交…

基于Java+SpringBoot+vue前后端分离社区医院信息平台设计实现

博主介绍&#xff1a;✌全网粉丝30W,csdn特邀作者、博客专家、CSDN新星计划导师、Java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专…

Hadoop_HDFS_常见的文件组织格式与压缩格式

参考资料 1. HDFS中的常用压缩算法及区别_大数据_王知无_InfoQ写作社区 2. 本文主要介绍下HDFS上的常见文件格式和压缩格式 总结 : HDFS 中常见的文件存储格式 textfile &#xff1a;行式存储格式sequencefile &#xff1a;行式存储格式orc &#xff1a;列式存储格式, 支…

Deployment 升级应用2

上次我们说到自己手动的做使用 RS 的方式来升级 pod &#xff0c;感觉还是蛮复杂的&#xff0c;并且容易弄错&#xff0c;实际生产过程中&#xff0c;肯定不会这样来弄&#xff0c;很危险 那么今天我们来分享 Deployment 的方式来显示的升级应用吧 Deployment 的方式升级应用…

3dmax崩溃后如何恢复文件?

当意外或突然关闭 3ds Max 场景时&#xff0c;有时会出现恢复 3ds Max 场景的问题。在处理任何项目的过程中&#xff0c;有时需要恢复 3ds Max 场景&#xff0c;为此在专用文件夹中创建备份副本。如果您使用的是 Windows 操作系统并且未更改项目位置或不知道项目位置&#xff0…

如何通过nginx代理实现外网访问内网mysql或oracle数据库

项目开发部署中经常会遇到MySQL或Oracle数据库安装在内网&#xff0c;而我们的应用服务只能部署在外网&#xff0c;如果实现外网服务访问连接内网的数据库呢&#xff1f;本次介绍如何通过Nginx配置实现外网访问内网数据库。 1、前置机服务器 首先要保证有一台前置机服务器既可…

为Android构建现代应用——主体结构

创建Screents和ViewModels 在前面的章节中&#xff0c;我们已经分析了OrderNow项目的理论概念和我们将赋予的组织。 在本章中&#xff0c;我们将开始实现初始结构和模板&#xff0c;这将联接每一个应用程序的部分。 首先将添加以下带有各自视图模型的主屏幕&#xff1a; •…

到底什么是前后端分离

目录 Web 应用的开发主要有两种模式&#xff1a; 前后端不分离 前后端分离 总结 Web 应用的开发主要有两种模式&#xff1a; 前后端不分离 前后端分离 理解它们的区别有助于我们进行对应产品的测试工作。 前后端不分离 在早期&#xff0c;Web 应用开发主要采用前后端不…

“云上新气象”,VDI+IDV混合部署,麒麟信安云正式上线某市气象局!

阴晴冷暖&#xff0c;风云变幻&#xff0c;气象与人们的生活密切相关&#xff0c;气象局信息系统的智慧高效运营对于提升灾害防御能力、城市气象观测等方面具有重要作用&#xff0c;随着气象业务范围的不断扩展&#xff0c;气象局的信息化建设与数字化转型也亟需提上日程。 走…

【Solr】Solr搜索引擎使用

文章目录 一、什么是Solr?二 、数据库本身就支持搜索啊,干嘛还要搞个什么solr?三、如果我们想要使用solr那么首先我们得安装它 一、什么是Solr? 其实我们大多数人都使用过Solr,也许你不会相信我说的这句话,但是事实却是如此啊 ! 每当你想买自己喜欢的东东时,你可能会打开某…

Python入门准备

安装并配置Python 1、想要更新终端里Python的版本&#xff1a; 在python.org官网上下载最新版&#xff0c;下载安装以后&#xff0c;在终端输入python3进行询问。 2、完成Python环境的安装(Linux:操作系统&#xff0c;基于Cent0S7&#xff09; 在Linux系统上安装Python需要…

中小学分班查询系统如何制作?这个方法3分钟轻松搞定

暑假一过完&#xff0c;新学年即将开始&#xff0c;学校面临着一个重要的任务&#xff1a;学生分班。无论是新生入学还是低年级升高年级&#xff0c;都需要进行分班工作。这对负责分班的老师们来说&#xff0c;增加了相当大的工作量和挑战。 在开学前&#xff0c;如何快速搞定…

Pure Admin 图标篇

1. 官方图标讲解地址 B站搜索&#xff1a;vue-pre-admin之图标篇&#xff0c;作者“乐于分享的程序员小铭” 2. 实操 1. iconify官网 Icon Sets • Iconify 2. 在build->optimize.ts 中&#xff0c;配置所用的Iconify icon包 如&#xff1a; "iconify-icons/ep&quo…

LNK 2001 问题的一种解决办法

问题&#xff1a; 可能有这样的报错&#xff0c;error LNK 2001: 无法解析的外部符号" protected: virtual void __thiscall testing::Test::SetUp(void)"。 解决办法&#xff1a; 换了各编译器就好了&#xff0c;从第二个换到了第一个。 猜测&#xff1a;这里是因…

开江县“五社联动 关爱一老一小“主题活动之银龄爱齿健康关爱计划

为进一步宣传和推动“五社联动”关爱“一老一小”的社工服务理念&#xff0c;近日&#xff0c;开江县网格员社会工作服务中心携手彭州市葡萄树社会工作服务中心链接爱心单位&#xff08;夜郎古酒&#xff09;捐赠的1440支牙膏&#xff08;合和泰品牌牙膏&#xff09;&#xff0…

Electron从构建到打包程exe应用

Electron从构建到打包程exe应用 Electron文档搭建网页装载到 BrowserWindow中定义全局对象进程之间通信打包应用程序对代码进行签名 Electron文档 搭建 创建一个文件夹&#xff0c;在根目录执行以下几个命令 1.npm init 2.npm install electron --save-dev 3.根目录新增main…

route_group时调整routing rule via array大小

使用route_group secondary pg pin时需要multi via/double via&#xff0c;可以使用如下办法。 用create_routing_rule -vias {{via_def_name array_size NR/R} {xx xx xx}} R和NR就是能不能旋转 set_routing_rule net_name -rule rule_name -max_routing_layers MEx -max_la…

RHCSA(一)

1、在VMware上创建虚拟机以及安装Linux操作系统&#xff0c;使用ssh进行远程连接 1.创建虚拟机 2.安装Linux系统 3.使用Xshell进行远程ssh连接终端 进入了Linux系统&#xff0c;打开终端输入ifconfig回车得到了虚拟网卡的IP地址为192.168. 163.128 打开Xshell远程连接软件…