博客
关于我
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/

    你可能感兴趣的文章
    Netty源码—2.Reactor线程模型一
    查看>>
    Netty源码—2.Reactor线程模型二
    查看>>
    Netty源码—3.Reactor线程模型三
    查看>>
    Netty源码—3.Reactor线程模型四
    查看>>
    Netty源码—4.客户端接入流程一
    查看>>
    Netty源码—4.客户端接入流程二
    查看>>
    Netty源码—5.Pipeline和Handler一
    查看>>
    Netty源码—5.Pipeline和Handler二
    查看>>
    Netty源码—6.ByteBuf原理一
    查看>>
    Netty源码—6.ByteBuf原理二
    查看>>
    Netty源码—7.ByteBuf原理三
    查看>>
    Netty源码—7.ByteBuf原理四
    查看>>
    Netty源码—8.编解码原理一
    查看>>
    Netty源码—8.编解码原理二
    查看>>
    Netty源码解读
    查看>>
    netty的HelloWorld演示
    查看>>
    Netty的Socket编程详解-搭建服务端与客户端并进行数据传输
    查看>>
    Netty的网络框架差点让我一夜秃头,哭了
    查看>>
    Netty相关
    查看>>
    Netty简介
    查看>>