对于单个价值i*m+j,i变化的价值是m,j的是1,因为m>=1,所以优先考虑i变化也就是向下走,其次在是向右走,那么还有多余的步数,考虑上下横跳,或者左右横跳,同理,左右横跳大于上下横跳,也就是当m=1时上下横跳,其余左右横跳即可
#include <bits/stdc++.h>
using namespace std;
#define int long long
int fun(int n,int a1,int d){
return n*(2*a1+(n-1)*d)/2;
一个 n×m 的网格图a,左上角为(0,0),右下角为(n−1,m−1),格子(i,j) 价值为 i×m+j。小红从左上角 (0,0)为起点,每一步可以走到上下左右四个方向的相邻格子。
每到达一个格子,就能获取相应格子的奖励。
需要注意的是,在到达某个格子获取宝物后,这个格子的宝物会在小红离开格子后再次刷新。
现在给出一个整数k,表示游游最多走k步。
问:游游最多能获得多少价值的宝物?
第一行输入q(1<=q<=105),表示询问个数。
接下来q行,每行输入n,m,k(1<=n,m,k<=104,n+m>2),表示矩阵大小和限制步数。
输出q行分别表示每组数据答案
输入
1
2 2 5
输出
12