博客
关于我
Making the Grade [POJ3666] [DP]
阅读量:800 次
发布时间:2023-02-06

本文共 1428 字,大约阅读时间需要 4 分钟。

为了解决这个问题,我们需要将给定的序列转换为单调不增或单调不减序列,并以最小代价完成转换。代价定义为所有元素调整后的值与原值的差的绝对值之和。我们可以使用动态规划来解决这个问题。

方法思路

  • 问题分析:我们需要将序列转换为单调序列,选择递增或递减中的代价更小的方式。动态规划是一个有效的方法来解决这种问题。
  • 离散化处理:由于序列中的数字可能很大,我们对序列进行排序并离散化处理,以减少计算复杂度。
  • 状态定义:定义 dp[i][j] 为处理到第 i 个元素,当前元素为 j(离散化后的值)时的最小代价。
  • 状态转移:对于每个元素 i,我们遍历所有可能的值 j,并记录前一步的最小代价 mn,然后更新当前状态的代价。
  • 优化处理:在每一步中,记录最小值 mn 以避免重复计算,从而优化时间复杂度。
  • 解决代码

    #include 
    #include
    #include
    #include
    #include
    #include
    #include
    #include
    #include
    #define RG register ll#define rep(i, a, b) for (RG i = a; i <= b; ++i)#define per(i, a, b) for (RG i = a; i >= b; --i)#define ll long long#define inf (1 << 30)#define maxn 2000using namespace std;ll n;ll h[maxn], b[maxn];ll dp[maxn][maxn];inline ll read() { ll x = 0, f = 1; char c = getchar(); while (c < '0' || c > '9') { if (c == '-') f = -1; c = getchar(); } while (c >= '0' && c <= '9') { x = x * 10 + (c - '0'); c = getchar(); } return x * f;}void work() { rep(i, 1, n) { ll mn = inf; rep(j, 1, n) { mn = min(mn, dp[i-1][j]); ll cost = (h[i] >= b[j]) ? h[i] - b[j] : b[j] - h[i]; dp[i][j] = mn + cost; } }}ll ans = inf;rep(i, 1, n) { ans = min(ans, dp[n][i]);}cout << ans << endl;

    代码解释

  • 读取输入:使用 read 函数读取输入数据,处理序列长度和序列元素。
  • 排序离散化:将序列 h 排序并存储在数组 b 中。
  • 动态规划初始化:初始化 dp 数组,dp[0][j] 设为 0。
  • 动态规划处理:对于每个元素 i,遍历所有可能的值 j,记录前一步的最小值 mn,并更新当前状态的代价。
  • 计算最小代价:遍历所有可能的值 j,找到最小的代价 ans 并输出。
  • 这种方法通过离散化和动态规划优化,确保了在合理的时间复杂度内解决问题,适用于较大的输入规模。

    转载地址:http://ieufk.baihongyu.com/

    你可能感兴趣的文章
    Netpas:不一样的SD-WAN+ 保障网络通讯品质
    查看>>
    NetScaler的常用配置
    查看>>
    netsh advfirewall
    查看>>
    NETSH WINSOCK RESET这条命令的含义和作用?
    查看>>
    Netstat端口占用情况
    查看>>
    Netty WebSocket客户端
    查看>>
    netty 主要组件+黏包半包+rpc框架+源码透析
    查看>>
    Netty 异步任务调度与异步线程池
    查看>>
    Netty中集成Protobuf实现Java对象数据传递
    查看>>
    netty之 定长数据流处理数据粘包问题
    查看>>
    Netty事件注册机制深入解析
    查看>>
    Netty原理分析及实战(四)-客户端与服务端双向通信
    查看>>
    Netty和Tomcat的区别已经性能对比
    查看>>
    Netty学习总结(5)——Netty之TCP粘包/拆包问题的解决之道
    查看>>
    Netty客户端断线重连实现及问题思考
    查看>>
    Netty工作笔记0006---NIO的Buffer说明
    查看>>
    Netty工作笔记0007---NIO的三大核心组件关系
    查看>>
    Netty工作笔记0011---Channel应用案例2
    查看>>
    Netty工作笔记0013---Channel应用案例4Copy图片
    查看>>
    Netty工作笔记0014---Buffer类型化和只读
    查看>>