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

【Luogu】动态规划三

P3842 [TJOI2007] 线段 - 洛谷

思路:

5道题里就这道算比较有意思的一道dp

按照贪心的想法,每一次我们都最好是走完后到端点处再往下走

所以我们这里定义 dp[i][0/1] 为走完第 i 行且位于 左/右端点

那么对于左端点,其可从上一个左边点走来,也可从右端点走来,所以转移方程很显然了

我们每次移动只需要加上 线段长 和 端点间的距离 即可

代码:

#include <iostream>
#include <algorithm>
#include<cstring>
#include <iomanip>
#include<cctype>
#include<string>
#include <set>
#include <vector>
#include <cmath>
#include <queue>
#include <unordered_set>
#include <map>
#include <unordered_map>
#include <stack>
#include <utility>
#include <array>
#include <tuple>
using namespace std;
#define int long long
#define yes cout << "YES" << endl
#define no cout << "NO" << endl
vector<pair<int, int>> lr(20005);
int dp[20005][2];
void solve()
{int n;cin >> n;for (int i = 1; i <= n; i++){cin >> lr[i].first >> lr[i].second;}dp[1][0] = lr[1].second + (lr[1].second - lr[1].first) - 1;dp[1][1] = lr[1].second - 1;for (int i = 2; i <= n; i++){int linelen = lr[i].second - lr[i].first + 1;dp[i][0] = min(dp[i - 1][0] + abs(lr[i - 1].first - lr[i].second) + linelen,dp[i - 1][1] + abs(lr[i - 1].second - lr[i].second) + linelen);dp[i][1] = min(dp[i - 1][0] + abs(lr[i - 1].first - lr[i].first) + linelen,dp[i - 1][1] + abs(lr[i - 1].second - lr[i].first) + linelen);}cout << min(dp[n][0] + n - lr[n].first, dp[n][1] + n - lr[n].second);
}
signed main()
{//cin.tie(0)->sync_with_stdio(false);int t = 1;//cin >> t;while (t--){solve();}return 0;
}

相关文章:

  • YOLOv12的注意力机制革新与实时检测性能分析——基于架构优化与历史版本对比
  • wps excel 常用操作
  • uniapp 安卓离线本地打包,Android Studio生成apk包
  • doris通过catalog查询db2频繁报错result set is closed
  • LVDS系列9:Xilinx 7系可编程输入延迟(二)
  • 深度学习-数值稳定性和模型初始化
  • 【C语言】C语言结构体:从基础到高级特性
  • 反爬系列 IP 限制与频率封禁应对指南
  • Python:简介,Python解释器安装,第一个Python程序,开发环境(PyCharm安装和配置、Sublime安装和配置)
  • 如何借助ETL数据集成工具实现数据一致性?
  • 正则表达式学习指南
  • 离线部署kubernetes
  • 使用localStorage的方式存储数据,刷新之后,无用户消息,需要重新登录,,localStorage 与 sessionStorage 的区别
  • 深度学习前沿 | TransNeXt:仿生聚合注意力引领视觉感知新时代
  • [Mac] 使用homebrew安装miniconda
  • 发币流程是什么,需要多少成本?
  • Sass的学习
  • SiamMask中的分类分支、回归分支与Mask分支,有何本质差异?
  • Java大师成长计划之第2天:面向对象编程在Java中的应用
  • Vue实战(08)解决 Vue 项目中路径别名 `@` 在 IDE 中报错无法识别的问题
  • 航行警告!黄海南部进行实弹射击,禁止驶入
  • 刘非履新浙江省委常委、杭州市委书记,曾在吉湘云多省任职
  • 讲座预告|大国博弈与创新破局:如何激励中国企业创新
  • 牧原股份一季度归母净利润44.91亿元,同比扭亏为盈
  • 银行板块整体走强,工行、农行、中行股价再创新高
  • 中国田协通报苏州马拉松“方便门”处理情况:涉事10人禁赛3年