首页 > 其他分享 >一维动态规划

一维动态规划

时间:2025-01-07 17:33:27浏览次数:5  
标签:return int days vector 一维 ans 动态 规划 dp

[Algo] 一维动态规划

fx1 - 暴力递归, fx2 - 自顶向底动态规划(记忆化搜索), fx3 - 自底向顶动态规划(严格位置依赖)

1. 最低票价

// 1. 最低票价
// https://leetcode.cn/problems/minimum-cost-for-tickets/description/
int duration[3] = {1, 7, 30};
int f11(vector<int>& days, vector<int>& costs, int i){
    if (i == days.size()) return 0;
    int ans = INT32_MAX;
    for (int k = 0, j = i; k < 3; k++)
    {
        while (j < days.size() && days[j] < days[i] + duration[k]) j++;
        ans = min(ans, costs[k] + f11(days, costs, j));
    }
    return ans;
}
int f12(vector<int>& days, vector<int>& costs, int i, vector<int>& mem)
{
    if (i == days.size()) return 0;
    if (mem[i] != -1) return mem[i];
    int ans = INT32_MAX;
    for (int k = 0, j = i; k < 3; k++)
    {
        while (j < days.size() && days[j] < days[i] + duration[k]) j++;
        ans = min(ans, costs[k] + f12(days, costs, j, mem));
    }
    mem[i] = ans;
    return ans;
}
int f13(vector<int>& days, vector<int>& costs, vector<int>& dp)
{
    dp[dp.size() - 1] = 0;
    for (int i = days.size() - 1; i >= 0; i--)
    for (int k = 0, j = i; k < 3; k++)
    {
        while (j < days.size() && days[j] < days[i] + duration[k]) j++;
        dp[i] = min(dp[i], costs[k] + dp[j]);
    }
    return dp[0];
}
int mincostTickets(vector<int>& days, vector<int>& costs) {
    vector<int> dp(days.size() + 1, INT32_MAX);
    return f13(days, costs, dp);
}

2. 解码方法

// 2. 解码方法
// https://leetcode.cn/problems/decode-ways/
int f21(string &s, int i)
{
    if (i == s.length()) return 1;
    if (s[i] == '0') return 0;
    if (i + 1 < s.length() && (s[i] - '0') * 10 + s[i + 1] - '0' <= 26) return f21(s, i + 1) + f21(s, i + 2);
    else return f21(s, i + 1);
}
int f22(string &s, int i, vector<int> &mem)
{
    if (i == s.length()) return 1;
    if (mem[i] != -1) return mem[i];
    int ans;
    if (s[i] == '0') ans = 0;
    else ans = f22(s, i + 1, mem);
    if (s[i] != '0' && i + 1 < s.length() && (s[i] - '0') * 10 + s[i + 1] - '0' <= 26) ans += f22(s, i + 2, mem);
    mem[i] = ans;
    return ans;
}
int f23(string &s, vector<int> &dp)
{
    dp[dp.size() - 1] = 1;
    for (int i = s.size() - 1; i >= 0; i--)
    {
        if (s[i] == '0') dp[i] = 0;
        else dp[i] = dp[i + 1];
        if (s[i] != '0' && i + 1 < s.length() && (s[i] - '0') * 10 + s[i + 1] - '0' <= 26) dp[i] += dp[i + 2];
    }
    return dp[0];
}
int numDecodings(string s) {
    vector<int> dp(s.length() + 1);
    return f23(s, dp);
}

3. 最长有效括号串

// 3. 最长有效括号串
// https://leetcode.cn/problems/longest-valid-parentheses/description/
int longestValidParentheses(string s) {
    vector<int> dp(s.length());
    for (int i = 1; i < s.length(); i++)
    {
        if (s[i] == ')')
        {
            int p = i - dp[i - 1] - 1;
            if (p >= 0 && s[p] == '(') dp[i] = dp[i - 1] + 2 + (p - 1 >= 0 ? dp[p - 1] : 0);
        }
    }
    int ans = 0;
    for (int len : dp) ans = max(ans, len);
    return ans;
}

标签:return,int,days,vector,一维,ans,动态,规划,dp
From: https://www.cnblogs.com/yaoguyuan/p/18658023

相关文章

  • C语言实现通讯录(动态的版本)
    通讯录的实现框架动态的版本通讯录默认能存放3个人的信息如果空间不够了,就增加空间,每次增加2个人的空间实现一个通讯录:人的信息:名字+年龄+性别+电话+地址1.增加联系人2.删除指定联系人3.查找联系人4.修改联系人5.显示联系人6.排序测试功能test.c......
  • DLL侧载(DLL Side-Loading) 是一种攻击技术,通常被黑客利用来执行恶意代码。它发生在应用
    DLL侧载(DLLSide-Loading)是一种攻击技术,通常被黑客利用来执行恶意代码。它发生在应用程序加载动态链接库(DLL)文件时,攻击者通过某些手段将恶意的DLL文件植入到应用程序的正常路径或不受限制的目录中,从而欺骗操作系统或应用程序加载恶意DLL,导致执行攻击者控制的代码。1. 什么是DLL......
  • 76页智能工厂规划及实施案例学习智能工厂规划
        智能工厂规划及实施中,综合布线系统作为核心基础设施,扮演着至关重要的角色。该系统以标准化、统一化、简化的方式,精心布置建筑物内外的通信网络,涵盖网络、电话、监控、电源及照明等多个子系统,确保信息传输的高效与稳定。综合布线不仅是物理线路的集合,更是智慧工厂信......
  • xxl_job系列---【Glue(java)模式如何通过动态参数传参?】
    1.编辑GLUE(Java)模式的定时任务这里以传递json参数为例:修改任务参数:{"startDate":"","endDate":"","desc":"入参日期格式:yyyyMMdd"}保存。2.编辑此定时任务的GLUE脚本import添加:importcom.xxl.job.core.context.XxlJobHelper;importcn.hutool......
  • 杨辉三角(动态规划)
    给定一个非负整数 numRows,生成「杨辉三角」的前 numRows 行。在「杨辉三角」中,每个数是它左上方和右上方的数的和。 示例1:输入:numRows=5输出:[[1],[1,1],[1,2,1],[1,3,3,1],[1,4,6,4,1]]示例 2:输入:numRows=1输出:[[1]] classSolution{public:......
  • 简易动态进程池
    /************proto.h********************/#ifndef__PROTO_H__#define__PROTO_H__#defineFORMAT "%ld\n"#defineMINIDLEPROCNUM 5#defineMAXIDLEPROCNUM 10#defineMAXPROCNUM 20#defineSERVERPORT "4096"#endif /************se......
  • ITSM落地经验之建设蓝图规划
    ITSM的规划建设不同于数字化转型规划,更多体现在管理中基本要素变革的规划,传统的ITSM规划重点在于流程规划。在过去,结合大部分客户实施ITSM效果较差或失败的现象来看,这些组织往往忽略了对组织文化与管理实践的诊断和规划,我们的建议在规划阶段充分对流程、文化、管理实践的现状进行......
  • FDM:有限差分法、使用欧拉方法的扫描/拍摄方法、半导体中的非抛物线一维薛定谔求解器研
      ......
  • WXML (微信小程序模板) 代码,用于根据 item.key 的值动态添加 CSS 类名,从而实现对特定
    文章目录1、logistics-param-wrap.wxml2、logistics-param-wrap.js3、logistics-param-wrap.wxss1、logistics-param-wrap.wxml<viewclass="logistics-param-wrap"><viewclass="logistics-param-title">物流参数</view><vi......
  • 2025年flask大学生规划平台 程序+论文 可用于计算机毕业设计
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容选题背景关于大学生规划平台的研究,现有研究主要集中在职业规划、学习管理以及在线教育资源整合等方面。然而,专门针对大学生全面规划平台的研究较少......