前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【第14题】CF987C Three displays

【第14题】CF987C Three displays

作者头像
小码匠
发布2023-08-31 14:04:14
1650
发布2023-08-31 14:04:14
举报
文章被收录于专栏:小码匠和老码农

题目

题目原文请移步下面的链接

  • https://www.luogu.com.cn/problem/CF987C
    • https://www.luogu.com.cn/problem/solution/CF987C
  • 标签:动态规划区间DP

题解

过程

动态规划题目重要推导状态迁移方程,推导出方程,代码就好些了;本题推导不难,过程就不写了,分享AC的代码;

坑点在下面,第一次我开的太小,大数据量时直接爆-1分支,后来改成下面这样就AC了。

代码语言:javascript
复制
const LL INF = 0x7f7f7f7f7f7f7f;

灵异事件:用万能头文件竟然提交失败,害我折腾了几分钟。

代码
代码语言:javascript
复制
#include <vector>
#include <iostream>

using namespace std;
#define endl '\n';
typedef long long LL;

const LL INF = 0x7f7f7f7f7f7f7f;

void best_coder() {
    LL ans = INF;
    int n;
    scanf("%d", &n);
    vector<vector<LL>> dp(n, vector<LL>(3, INF));
    vector<LL> s(n);
    vector<LL> c(n);
    for (int i = 0; i < n; ++i) {
        scanf("%d", &s[i]);
    }
    for (int i = 0; i < n; ++i) {
        scanf("%d", &c[i]);
    }
    for (int i = 0; i < n; ++i) {
        dp[i][0] = c[i];
        for (int k = 1; k < 3; ++k) {
            for (int j = 0; j < i; ++j) {
                if (s[j] < s[i]) {
                    dp[i][k] = min(dp[i][k], dp[j][k - 1] + c[i]);
                }
            }
        }
        ans = min(ans, dp[i][2]);
    }
    if (ans == INF) {
        printf("%d\n", -1);
    } else {
        printf("%lld\n", ans);
    }
}

void happy_coder() {
}

int main() {
    // 提升cin、cout效率
    ios::sync_with_stdio(false);
    cin.tie(nullptr);
    cout.tie(nullptr);

    // 小码匠
    best_coder();

    // 最优解
    // happy_coder();

    // 返回
    return 0;
}

END

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2023-05-10,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 小码匠和老码农 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 题目
  • 题解
    • 过程
      • 代码
      相关产品与服务
      大数据
      全栈大数据产品,面向海量数据场景,帮助您 “智理无数,心中有数”!
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档