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搞反……以及循环中忘记初始化值

    还是要冷静

    注定失败的战争,也要拼尽全力去打赢它; 就算输,也要输得足够漂亮。
  • 相关阅读:
    克如斯卡尔 P1546
    真正的spfa
    第四课 最小生成树 要点
    关于vscode中nullptr未定义
    cmake学习笔记
    python学习笔记
    (BFS 图的遍历) 2906. kotori和迷宫
    (图论基础题) leetcode 997. Find the Town Judge
    (BFS DFS 并查集) leetcode 547. Friend Circles
    (BFS DFS 图的遍历) leetcode 841. Keys and Rooms
  • 原文地址:https://www.cnblogs.com/yalphait/p/7782681.html
Copyright © 2011-2022 走看看