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

样例1:

2 3 1 2 3 3 4 2 样例2:

1 4 4 5 0 5 样例3:

2 10 96 56 54 46 86 12 23 88 80 43 16 95 18 29 30 53 88 83 64 67 样例1: 82 样例2: 122 样例3: 316994 【输入输出样例1解释】 第1次:第1行取行首元素,第2行取行尾元素,本次得分为121+221=6 第2次:两行均取行首元素,本次得分为222+322=20 第3次:得分为323+423=56。总得分为6+20+56=82 【限制】 60%的数据满足:1<=n, m<=30, 答案不超过1016 100%的数据满足:1<=n, m<=80, 0<=aij<=1000

这就是NOIP2007T3的题目,这里我给出一个JAVA的解法,至于为什么选择JAVA因为这一题涉及大数运算,使用JAVA能减少很多的工程。

好了,废话不多说,先讲讲我的思路: 首先我们从题目可以知道,所谓的矩阵取数说白了就是求每一个行的最佳取数方法,那么要解决的问题就简化为一个双端队列的取数问题了。我们知道,每取完一个数以后,队列就会变成一个新的双端队列,而且无论你的取数顺序如何,最终还是需要相同的取数步数,因此这是个dp问题,而这题的核心思想即使对于同一个子队列,接下来的操作不会受到之前的操作的影响,于是我们只要保证我们找到生成这个子队列的最优解法就行了。于是我在这里用了一个矩阵来表示取数的结果,k表示取数的步数,当从前端取数的时候则往矩阵下边走,当从后端取数的时候则往右边走,若遇到走入同一个空格的情况则取其最大值,于是当走完m步以后,则会出现一个对角线型的结果图,只要沿着对角线找出最大值输出来即为题解了。

import java.math.BigInteger;

import java.util.Scanner;

public class Main {

static int m;

static int n;

public static void main(String[] args) {

Scanner input=new Scanner(System.in);

BigInteger account=new BigInteger("0");

n=input.nextInt();

m=input.nextInt();

for(int i=0;i

int[] que=new int[m];

BigInteger[][] map=new BigInteger[m+1][m+1];

map[0][0]=new BigInteger("0");

for(int j=0;j

que[j]=input.nextInt();

}

BigInteger number=new BigInteger("2");

BigInteger max=new BigInteger("0");

for(int k=0;k

for(int j=0;j<=k;j++){

BigInteger integer1=number.multiply(new BigInteger(""+que[k-j]));

BigInteger integer2=number.multiply(new BigInteger(""+que[m-j-1]));

integer1=integer1.add(map[k-j][j]);

integer2=integer2.add(map[k-j][j]);

if(map[k-j+1][j]==null||integer1.compareTo(map[k-j+1][j])>0) {

map[k-j+1][j] = integer1;

}

if(map[k-j][j+1]==null||integer2.compareTo(map[k-j][j+1])>0){

map[k-j][j+1]=integer2;

}

}

number=number.multiply(new BigInteger("2"));

}

for(int j=0;j

if(map[m-j][j].compareTo(max)>0){

max=map[m-j][j];

}

}

account=account.add(max);

}

System.out.println(account.toString());

}

}

矩阵游戏java_矩阵取数游戏JAVA题解相关推荐

  1. 【区间DP+高精】codevs1166 矩阵取数游戏题解

    转自: [ametake版权所有]http://blog.csdn.net/ametake欢迎来看 http://blog.csdn.net/ametake/article/details/47664 ...

  2. 【日常学习】【区间DP+高精】codevs1166 矩阵取数游戏题解

    题目来自NOIP2007TG3 如果在考场上我现在已经歇菜了吧 今天一整天的时间全部投在这道题上,收获不小. 先上题目 题目描述 Description [问题描述] 帅帅经常跟同学玩一个矩阵取数游戏 ...

  3. 【每日DP】day 10、P1005 矩阵取数游戏【区间DP+高精(python)】难度⭐⭐⭐★

    P1005 矩阵取数游戏 输入 2 3 1 2 3 3 4 2 输出 82 说明/提示 NOIP 2007 提高第三题. 数据范围: 60%60\%60% 的数据满足:1≤n,m≤301\le n,m ...

  4. P1005 矩阵取数游戏(__int128模板/简单dp)

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

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

    来源:牛客网: 文章目录 题目描述 题解: 代码: 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 262144K,其他语言524288K 64bit IO Format: %lld ...

  6. 洛谷1005 【NOIP2007】矩阵取数游戏

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

  7. 【codevs1166】【noip07TG】矩阵取数游戏,新的开始

    1166 矩阵取数游戏 2007年NOIP全国联赛提高组 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题解 题目描述 Description [问题描述] 帅帅经 ...

  8. 洛谷P1005 矩阵取数游戏 ACM 大数+区间dp

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

  9. 【NOIP2007提高组】矩阵取数游戏

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

最新文章

  1. (转)线段树的区间更新
  2. python升级或者其他原因把yum搞坏了
  3. rpm如何卸载mysql_Linux下卸载和安装MySQL[rpm包]
  4. 如何在面试中通过工厂模式来给自己加分?逆袭面经分享
  5. [css] 请举例说明css有哪些不可继承的属性?
  6. 妈的我好像发现是哪出问题了
  7. linux 内核4.12,Linux Kernel 4.12 发布,最新的稳定版内核
  8. Windows 下命令行修改文件夹的控制权限 Cacls
  9. wpf silverlight的Behavior
  10. django1.6 mysql_如何在Django1.6结合Python3.4版本中使用MySql
  11. 使用ORL人脸库,通过GRNN网络和HOG特征提取的人脸识别算法matlab仿真
  12. 面向对象编程三大特性------封装、继承、多态
  13. python---字符串的拼接、去重、反转、字母花样排序、单词出现判断、统计文件特定单词频率lambda、硬盘容量、列表转字符串
  14. 【微信小程序更改appid失败】微信小程序修改appid一直失败报错tourist appid解决办法
  15. 分拣外观残缺的机器人_基于机器视觉的垃圾分拣机器人设计
  16. 幽默故事:1、我喜欢的女神;2、农村淑女(木子家原创)
  17. 解密Kerberos流量
  18. ios7新特性--4
  19. 在腾讯云中配置服务器外网可以访问
  20. php randomcode 函数,MyRandomCode.php

热门文章

  1. spring自动填充
  2. What is the Softmax Function?详解机器学习中的Softmax函数【小白菜可懂】
  3. 《领导沟通艺术与真实影响力》感想二
  4. 导师喜欢什么样的“真”研究生?(转科学网)
  5. Android 富文本编辑器 图文混排
  6. 计算机学院写论文格式,写作计算机论文的标准格式是什么
  7. 无盘工作站给服务器ip地址协议,如何给无盘工作站安装TCP IP协议
  8. Consumer消息拉取和消费流程分析
  9. 函数练习题,个人名片展示
  10. Excel开发帮助文档查看方法