daimayuan 国家铁路(前缀和,dp)代码源

简介: daimayuan 国家铁路(前缀和,dp)代码源

1.首先答案必定为A [ x 1 , y 1 ] + A [ x 2 , y 2 ] + C ∗ ( ∣ x 1 − x 2 ∣ + ∣ y 1 − y 2 ∣ ) A[x_1,y_1]+A[x_2,y_2]+C*(|x_1-x_2|+|y_1-y_2|)A[x1,y1]+A[x2,y2]+C(x1x2+y1y2)

2.我们想办法去掉绝对值,给选择的两个点规定方向,分别是一个点在左下,一个点右上;一点左上,一个点右下(方向是两个点的相对方向)。

1.当左下右上时,维护 m 1 [ i ] [ j ] m_1[i][j]m1[i][j] 为左下角到i , j i,ji,j的最小的 C ∗ ( i − j ) + A [ i , j ] C*(i-j)+A[i,j]C(ij)+A[i,j]

因为如果这个方案取到答案:

a n s = A [ x 1 , y 1 ] + A [ x 2 , y 2 ] + C ∗ ( y 2 − y 1 + x 1 − x 2 ) ( x 1 , y 1 左 下 , x 2 , y 2 右 上 ) 。 ans=A[x_1,y_1]+A[x_2,y_2]+C*(y_2-y_1+x_1-x_2)(x_1,y_1左下,x_2,y_2右上)。ans=A[x1,y1]+A[x2,y2]+C(y2y1+x1x2)(x1,y1x2,y2)

变换得a n s = A [ x 2 , y 2 ] + C ∗ ( y 2 − x 2 ) + A [ x 1 , y 1 ] + C ( x 1 − y 1 ) ans=A[x_2,y_2]+C*(y_2-x_2)+A[x_1,y_1]+C(x_1-y_1)ans=A[x2,y2]+C(y2x2)+A[x1,y1]+C(x1y1),我们令m 1 [ i , j ] = A [ i , j ] + C ∗ ( i − j ) m_1[i,j]=A[i,j]+C*(i-j)m1[i,j]=A[i,j]+C(ij),m 1 m_1m1维护最小值。

2.同理当左上右下时,维护 m 2 [ i ] [ j ] m_2[i][j]m2[i][j] 为左上角到i , j i,ji,j的最小的 − C ∗ ( i + j ) + A [ i , j ] -C*(i+j)+A[i,j]C(i+j)+A[i,j]

m 2 [ i , j ] = A [ i , j ] − C ∗ ( i + j ) m_2[i,j]=A[i,j]-C*(i+j)m2[i,j]=A[i,j]C(i+j)。(想不明白画画图)。

维护利用了二维前缀和思想

代码如下

/*********************************************************************
    程序名:
    版权: Joecai
    作者: Joecai
    日期: 2022-04-28 23:56
    说明:
*********************************************************************/
#include <bits/stdc++.h>
using namespace std;
#define x first
#define y second
# define rep(i,be,en) for(int i=be;i<=en;i++)
# define pre(i,be,en) for(int i=be;i>=en;i--)
#define ll long long
#define endl "\n"
#define LOCAL
#define pb push_back
#define int long long
typedef pair<ll, ll> PII;
#define eb emplace_back
#define sp(i) setprecision(i)
const int N = 1000 + 10, INF = 0x3f3f3f3f;
int h, w, c;
int a[N][N];
int m1[N][N];//维护左下角到i,j的的最小值
int m2[N][N];//维护左上角到i,j的最小值
void solve()
{
  cin >> h >> w >> c;
  memset(m1, 0x3f, sizeof(m1));
  memset(m2, 0x3f, sizeof(m2));
  for (int i = 1; i <= h; i++)
  {
    for (int j = 1; j <= w; j++)
    {
      cin >> a[i][j];
    }
  }
  for (int i = h; i >= 1; i--)
  {
    for (int j = 1; j <= w; j++)
    {
      m1[i][j] = min({a[i][j] + c * (i - j), m1[i + 1][j], m1[i][j - 1]}); //左下到右上
    }
  }
  for (int i = 1; i <= h; i++)
  {
    for (int j = 1; j <= w; j++)
    {
      m2[i][j] = min({a[i][j] - c * (i + j), m2[i - 1][j], m2[i][j - 1]}); //左s上到右下
    }
  }
  int ans = 0x3f3f3f3f3f3f3f3f;
  for (int i = h; i >= 1; i--)
  {
    for (int j = 1; j <= w; j++)
    {
      ans = min(ans, a[i][j] + c * (j - i) + min(m1[i + 1][j], m1[i][j - 1]));
    }
  }
  for (int i = 1; i <= h; i++)
  {
    for (int j = 1; j <= w; j++)
    {
      ans = min(ans, a[i][j] + c * (i + j) + min(m2[i - 1][j], m2[i][j - 1]));
    }
  }
  cout << ans << endl;
}
signed main() {
  std::ios::sync_with_stdio(false);
  std::cin.tie(nullptr);
  //#ifdef LOCAL
  //freopen("data.in.txt","r",stdin);
  //freopen("data.out.txt","w",stdout);
  //#endif
  int __ = 1;
  //cin>>__;
  while (__--)
  {
    solve();
  }
  return 0;
}

点个赞再走叭~(*σ´∀`)σ

目录
相关文章
|
PHP Python
矩阵制度三三复制直销系统模式开发详解 | 矩阵制度三三复制直销系统开发源码demo示例
矩阵制度三三复制模式是一种常见的直销模式,也被称为三三复制模式。该模式限制了前排的数量,只能填满3个位置,奖金则是按照固定的深度来进行领取的。在该模式中,每个参与者都可以推荐其他人加入,如果成功推荐,就可以获得相应的奖金。具体来说,如果推荐一个参与者,可以获得20美元的奖金;如果推荐两个参与者,可以获得10美元的奖金;如果推荐三个参与者,可以获得4美元的奖金。此外,该模式还有一些其他的奖金制度,如培育奖金、扣税等。
|
3月前
|
JSON 数据可视化 定位技术
Map——使用BIGEMAP+geojson获取乡镇行政边界数据
Map——使用BIGEMAP+geojson获取乡镇行政边界数据
162 0
|
5月前
|
SQL 安全 网络安全
在数字迷宫中寻找出口:网络安全与信息安全的现代挑战
本文旨在探讨网络安全与信息安全领域面临的挑战,并分享相关知识。从网络漏洞的挖掘到加密技术的演进,再到安全意识的培养,我们深入讨论了这些方面的重要性和实际应用。文章不仅提供了技术细节,还强调了用户教育在防御策略中的关键角色,以期为读者提供全面的网络安全知识框架。
|
6月前
|
安全 算法 网络安全
网络安全与信息保护:建立数字世界的铁壁
在当今数字化浪潮愈演愈烈的时代,网络安全和信息保护成为了至关重要的议题。本文将探讨网络安全漏洞、加密技术以及安全意识等方面的知识,并提出建立数字世界的铁壁的重要性。
47 0
|
6月前
|
算法 前端开发
选择建筑的方案数
选择建筑的方案数
39 0
qgis 将县区的数据转成市区的边界数据
在第一步的基础上,有了21个面,那么咱们可以对当前的面进行融合操作,生成一个面,也就是咱们需要的市区边界数据。
qgis 将县区的数据转成市区的边界数据
|
机器学习/深度学习 人工智能 JavaScript
LDUOJ——E. 塔(dp+状态的选择)
LDUOJ——E. 塔(dp+状态的选择)
86 0
PAT甲级 1010. Radix (25分)
PAT甲级 1010. Radix (25分)
74 0
|
API
Google Earth Engine——街区数据集包含2010年的人口普查街区,最小单位大致相当于一个城市街区。超过1100万个多边形特征,覆盖美国、哥伦比亚特区、波多黎各和岛屿地区。
Google Earth Engine——街区数据集包含2010年的人口普查街区,最小单位大致相当于一个城市街区。超过1100万个多边形特征,覆盖美国、哥伦比亚特区、波多黎各和岛屿地区。
177 0
Google Earth Engine——街区数据集包含2010年的人口普查街区,最小单位大致相当于一个城市街区。超过1100万个多边形特征,覆盖美国、哥伦比亚特区、波多黎各和岛屿地区。