当前位置: 首页 > news >正文

问题 E: Connecting Territories(DP)

题目描述

Ava is playing a strategic game on a grid of tiles.Each tile has an associated cost. When the costs of the tiles are read from left to right, starting with the first row, a repeating pattern of the first M positive integers in increasing order is revealed:
1, 2, 3, . . . , M, 1, 2, 3, . . . , M, 1, 2, 3, . . .. In this pattern,M represents the maximum cost of a tile. In the grid of tiles shown, M is equal to 5.
Ava needs to purchase one tile in each row in order to make a connecting path from the upper territory (above the first row of tiles) to the lower territory (below the last row of tiles). The first tile purchased must be in the first row. Each subsequently purchased tile must share either an edge or a corner with the tile purchased previously. In the grid of tiles shown, the cost of Ava’s connecting path is 9.
Given a grid of tiles, your job is to determine the minimum cost of a connecting path between the upper and lower territories.

输入

The first line of input contains a positive integer, R, representing the number of rows in the grid. The second line contains a positive integer, C, representing the number of columns in the grid. The third line contains a positive integer, M where M ≤ 100 000, representing the maximum cost of a tile.
The following table shows how the available 15 marks are distributed:

输出

Output the positive integer, P, which is the minimum cost of a connecting path between the upper and lower territories.

样例输入 Copy
3
5
7
样例输出 Copy
6
提示

Explanation of Output for Sample Input
The cost of each tile is shown. The sequence of tiles that Ava should purchase to minimize the cost of a connecting path is highlighted in green.

动态规划 开数组只保存上一行的数据

代码

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
int r,c,m;
int main(){cin>>r>>c>>m;vector<int>pre(c);for(int j=0;j<c;++j)pre[j]=j%m+1;for(int i=1;i<r;++i){vector<int>jam(c,INT_MAX);//LLONG_MAXfor(int j=0;j<c;++j){int x=(i*c+j)%m+1;for(int k=max(0,j-1);k<=min(c-1,j+1);++k)jam[j]=jam[j]>x+pre[k]?x+pre[k]:jam[j];			}pre=move(jam);}int ans=INT_MAX;for(int j=0;j<c;++j)ans=ans>pre[j]?pre[j]:ans;cout<<ans;return 0;
}

http://www.dtcms.com/a/278131.html

相关文章:

  • 理解volatile:并发编程的核心机制
  • 能说说MyBatis的工作原理吗?
  • 柯西不等式
  • CATIA许可价格高,设计部门如何精细化分配?
  • 【时时三省】(C语言基础)通过指针引用数组元素2
  • 未来航空电子系统
  • 浮点数的乘法与除法运算耗时对比
  • 洛谷 P13014:[GESP202506 五级] 最大公因数
  • 基于python的栅格数据标准差椭圆
  • Can201-Introduction to Networking:Transport Layer 传输层
  • 跨领域科学探索智能体设计与实现
  • 模块化编程为何使用函数指针分析(一)(深入分析指针的实际应用)
  • 【uniapp】元胞自动机GameOfLife生命游戏项目开发流程详解
  • Java SE--图书管理系统模拟实现
  • 模型占用显存大小评估
  • 【AI大模型】ComfyUI:Stable Diffusion可视化工作流
  • java基础编程(入门)
  • C++多线程知识点梳理
  • 深入理解 Java Map 与 Set
  • 每天学一个八股(二)——详解HashMap
  • 封装---优化try..catch错误处理方式
  • 【echarts踩坑记录】为什么第二个Y轴最大值不整洁
  • Acrobat 表单中的下拉菜单(附示例下载)
  • 使用docker的常用命令
  • RS4585自动收发电路原理图讲解
  • 从 Manifest V2 升级到 Manifest V3 的注意事项
  • Extended Nested Arrays for Consecutive Virtual Aperture Enhancement
  • 财务管理体系——解读大型企业集团财务管理体系解决方案【附全文阅读】
  • Python异步编程
  • 57.第二阶段x64游戏实战-实时监控抓取lua内容