首页 > 其他分享 >[ 514. 自由之路] (动态规划)

[ 514. 自由之路] (动态规划)

时间:2024-05-29 22:46:05浏览次数:20  
标签:index charAt int length key 动态 规划 514 dp

  • dp[i][j]
    • i 表示前i个字符
    • j 的选择是第i个字符在ring中出现的位置列表。给初始编号
    • dp[i][j] =. 所有(dp[i-1][k] + cost(j,k) k可选的这样的值中的最小值
import java.util.ArrayList;
import java.util.List;

class Solution {
    int n;
    List<Integer>[] index = new ArrayList[26];
    int[][] dp;

    public int findRotateSteps(String ring, String key) {
        n = ring.length();
        dp = new int[key.length()][n];
        for (int i = 0; i < key.length(); i++) {
            int c = key.charAt(i) - 'a';
            index[c] = new ArrayList<>();
            for (int j = 0; j < n; j++) {
                if (ring.charAt(j) == key.charAt(i)) {
                    index[c].add(j);
                }
            }
        }
        for (int i = 0; i < key.length(); i++) {
            int c = key.charAt(i) - 'a';
            if ( i == 0) {
                for (int u : index[c]) {
                    dp[0][u] = cost(0, u) ;
                }
            }
            else {
                for (int u : index[c]) {
                    dp[i][u] = Integer.MAX_VALUE;
                    int last = key.charAt(i-1) - 'a';
                    for (int v : index[last]) {
                        dp[i][u] = Math.min(dp[i][u], dp[i-1][v] + cost(u,v));
                    }
                }
            }
        }
        int ans = Integer.MAX_VALUE;
        int tail = key.charAt(key.length() - 1) - 'a';
        for(int u : index[tail]) {
            ans = Math.min(dp[key.length()-1][u], ans);
        }
        return ans;
    }

    public int cost(int u, int v){
        // v 在 12点方向
        int x = Math.abs(u-v);
        int y = n - x;
        return Math.min(x, y) + 1;
    }
}

标签:index,charAt,int,length,key,动态,规划,514,dp
From: https://www.cnblogs.com/fishcanfly/p/18221283

相关文章

  • 多A*算法路径规划(附MATLAB代码)
     A*算法介绍A*算法是一种常用的寻路算法,被广泛应用于人工智能和游戏开发中。该算法通过评估每个节点的代价和启发式函数来找到最佳路径。在这篇博文中,我们将深入探讨A*算法的原理。A*算法的核心思想是在搜索过程中综合考虑两个因素:已经花费的代价和还需要花费的代价。具体而......
  • PSO算法路径规划(附MATLAB代码)
    粒子群优化(PSO)算法一种启发式优化算法,灵感来源于鸟群或鱼群等群体智能行为的模拟。PSO算法最早由Kennedy和Eberhart于1995年提出,通常用于解决搜索空间连续、高维的优化问题。PSO算法模拟了鸟群中鸟类搜索食物的行为。在PSO算法中,候选解称为粒子,每个粒子通过搜索空间中移动来......
  • 动态库与静态库
    目录认识动静态库静态库动态库动静态库的优缺点创建与使用动静态库静态库的创建静态库的使用动态库的创建 动态库的使用认识动静态库一个程序编译为可执行程序需要经历四个步骤:预处理:在此阶段,源代码会被预处理器处理。预处理器会执行如移除注释、展开宏定义、......
  • 动态规划在图搜索中的应用:Floyd算法详解
    多源汇最短路问题-具有多个源点Floyd算法O(n^3)-动态规划给定一个n个点m条边的有向图,图中可能存在重边和自环,边权可能为负数。再给定k个询问,每个询问包含两个整数x和y,表示查询从点x到点y的最短距离,如果路径不存在,则输出“impossible”。数据保证图中不存在负权回路。......
  • C++:虚表指针、虚表、虚函数和动态多态
    classBase{public:virtualvoidshow(){std::cout<<"Baseshow"<<std::endl;}};classDerived_1:publicBase{public:voidshow()override{std::cout<<"Derivedshow"<<std::endl;}};class......
  • vue3 组件的动态渲染 <component :is=“componentTag“ />
    1、动态渲染组件        <component:is=""></component>        通过isShow来切换显示A、B组件首先创建父组件.vue文件和两个子组件A、B文件,并引入。template:<div><h3>我是父组件dynamicComp.vue</h3><button@click="isShow=!isShow">切换......
  • 如何制定测试团队的工作规划
    帮知识星球一位同学Review他今年的测试团队工作规划,他说要向上级领导汇报,自己写的汇报PPT心里没底,让我帮忙检查一下,顺带提一些建议。从测试团队负责人的角度出发,要制定本团队的工作规划,特别是需要向上汇报的内容,我个人的经验有如下几点。 1、定义目标:做什么,预期结果和价值。......
  • 外链建设周期:合理规划周期,确保外链持续有效
    外链建设是提升网站权重与排名的重要手段,但是,外链建设并非一蹴而就的过程。为了确保外链的持续有效性,需要合理规划建设周期。一、什么是外链建设周期外链建设周期是指在一定时间内,针对目标网站进行外链优化的具体规划和实施活动,包括建立外链资源库、外链分析、外链清理、外链发......
  • 【Embedding合集】推荐系统/风控领域中动态连续型不定长序列数据处理方案
    【Embedding合集】推荐系统/风控领域中动态连续型不定长序列数据处理方案在推荐系统或是风控领域都存在这样一类动态连续型序列数据,如用户最近一个月消费记录,最近半年还款记录等等,这些序列数据的每一个元素都是连续型的数字,并且长度不定(每个用户消费的笔数都不一样),但这类动......
  • 深入探索C语言动态内存分配
    在编程的广阔天地里,C语言以其直接操控底层的能力和高效性能,至今仍占据着不可替代的地位。而在C语言的众多特性中,动态内存分配无疑是一项核心而又充满挑战的技术。本文将引领您深入探索这一技术的奥秘,从理论到实践,揭示动态内存分配的魅力所在。一、动态内存分配的必要性在程序......