zoukankan      html  css  js  c++  java
  • 17.11.4 矩阵取数游戏

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

    l<=n,m<=80,1<=aij<=1000
    
    
    关于输出
    仅包含1行,为一个整数,即输入矩阵取数后的最大的分。
    
    
    例子输入
    2 3
    
    1 2 3
    3 4 2
    例子输出
    34
     1 #include<iostream>
     2 using namespace std;
     3 int main()
     4 {
     5     int n, m,a,b,sumlin=0,summax=0;
     6     cin >> n >> m;
     7     int max[81][81],num[81];
     8     for(int lin=1;lin<=n;lin++)
     9     {
    10         for (int col = 1; col <= m; col++)
    11             cin >> num[col];
    12         for(int j=0;j<=m;j++)
    13         for (int i = 0; i <= m - j; i++)
    14         {
    15             if (i == 0 && j == 0)
    16                 max[i][j] = 0;
    17             else if (i == 1 && j == 0)
    18                 max[i][j] = num[1];
    19             else if (i == 0 && j == 1)
    20                 max[i][j] = num[m];
    21             else
    22             {
    23                 if (i >= 1)
    24                     a = max[i - 1][j] + num[i] * (i + j);
    25                 else
    26                     a = 0;
    27                 if (j >= 1)
    28                     b = max[i][j - 1] + num[m-j+1] * (i + j);
    29                 else
    30                     b = 0;
    31                 max[i][j] = (((a) > (b)) ? (a) : (b));
    32             }
    33         }
    34         sumlin = 0;
    35         for (int i = 0; i <= m; i++)
    36         {
    37             if (max[i][m - i] > sumlin)
    38                 sumlin = max[i][m - i];
    39         }
    40         summax += sumlin;
    41     }
    42     cout << summax << endl;
    43     return 0;
    44 }
    View Code

    小生第一次做dp类型的题……更不用说是区间dp了。

    花了一个多小时去学习编写以及debug

    debug的时候发现反而低级错误更多...

    把n和m搞反……以及循环中忘记初始化值

    还是要冷静

    注定失败的战争,也要拼尽全力去打赢它; 就算输,也要输得足够漂亮。
  • 相关阅读:
    ByteBuffer的mark、position、limit、flip、reset,get方法介绍ok
    java.nio.ByteBuffer的flip、rewind和compact几个方法的区分使用
    maven之一:maven安装和eclipse集成
    Java 8 函数式接口
    Lambda 表达式
    jdk8十大新的特性
    阿里巴巴73款开源产品列表,值得收藏
    【Java】java.util.Objects 工具类方法研究
    ARIMA 模型简单介绍
    python 二维数组取值
  • 原文地址:https://www.cnblogs.com/yalphait/p/7782681.html
Copyright © 2011-2022 走看看