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美元的奖金。此外,该模式还有一些其他的奖金制度,如培育奖金、扣税等。
|
4月前
|
JSON 数据可视化 定位技术
Map——使用BIGEMAP+geojson获取乡镇行政边界数据
Map——使用BIGEMAP+geojson获取乡镇行政边界数据
177 0
|
7月前
|
机器学习/深度学习 人工智能 搜索推荐
一区9.3分top刊|多组学SNF数据融合的正确打开方式
这篇研究文章聚焦于多组学在揭示胎盘功能障碍中的作用,发表于2023年9月的《BMC Medicine》,IF为9.3。研究通过整合转录组学、蛋白质组学和代谢组学数据,鉴定出与常见产科综合征(如先兆子痫、胎儿生长受限和自发性早产)无关的胎盘集群。使用人工智能的无偏相似性网络融合(SNF)方法,分析发现四个不同的胎盘簇,其中早发性先兆子痫的簇显示强烈的功能障碍模式,而以自发性早产为主的簇则较弱。研究结果增加了对病理过程的理解,可能促进个性化干预措施的发展。
181 0
|
7月前
|
算法 前端开发
选择建筑的方案数
选择建筑的方案数
41 0
算法强化每日一题--删除公共字符
算法强化每日一题--删除公共字符
|
测试技术
(dfs)(枚举)第十四届蓝桥杯第三次模拟赛:9.最大滑雪长度
(dfs)(枚举)第十四届蓝桥杯第三次模拟赛:9.最大滑雪长度
134 0
|
BI 定位技术 Python
全国370城市空间权重矩阵及计算方法、城市点坐标、城市道路网、城市poi感兴趣点
全国370城市空间权重矩阵及计算方法、城市点坐标、城市道路网、城市poi感兴趣点
全国370城市空间权重矩阵及计算方法、城市点坐标、城市道路网、城市poi感兴趣点
牛客IOI周赛23-普及组 D.小L的数列 (dp状态+枚举因子)
牛客IOI周赛23-普及组 D.小L的数列 (dp状态+枚举因子)
107 0