Dynamic programming - LSC problem

opencv——superpixel算法——SLIC,SEEDS,LSC 整理资料不容易,版权所,转载请标明出处,谢谢!!opencv关于超像素生成,目前没有发现网上有代码,这里为了方便大家使用超像素,我整理了一下opencv生成超像素的方法,希望对大家有帮助。这里主要介绍使用opencv生成superpixel,主要介绍的算法为SLIC,SEEDS,LSC。但是目前superpixel生成算法在OpenCV 3.1.0的Release版本中并不存在,因为他们是存放在op 阅读详情

LSC Problem

自底向上

using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApplication17
{
    class Program
    {
        static void Main(string[] args)
        {
            int xLength;
            int yLength;
            Console.WriteLine ("Input the length of X : ");
            xLength = int.Parse(Console.ReadLine());
            Console.WriteLine ("Input the length of Y : ");
            yLength = int.Parse(Console.ReadLine());
            int [,] c = new int [xLength+1,yLength+1];
            int[] x = new int[xLength+1];
            int[] y = new int[yLength+1];
            for (int i = 0; i <= xLength; i++)
            {
                Console.WriteLine("Input each element of X : ");
                x[i] = int.Parse(Console.ReadLine());
                c[i, 0] = 0;
            }
            for (int i = 0; i <= yLength; i++)
            {
                Console.WriteLine("Input each element of Y : ");
                y[i] = int.Parse(Console.ReadLine());
                c[0, i] = 0;
            }
            for (int i = 1; i <= xLength; i++)
            {
                for (int j = 1; j <= yLength; j++)
                {
                    if (x[i] == y[j])
                        c[i, j] = c[i - 1, j - 1] + 1;
                    else if (c[i - 1, j] >= c[i, j - 1])
                        c[i, j] = c[i - 1, j];
                    else c[i, j] = c[i, j - 1];
                }
            }
            int[] pre = new int[0];
            int[] res = generate(pre,c,xLength,yLength,x);
            for (int i = 0; i < res.Length; i++)
            {
                Console.Write("{0} ", res[i]);
            }
            Console.Write("\n");
            for (int i = 0; i < xLength; i++)
            {
                for (int j = 0; j < yLength; j++)
                {
                    Console.Write("{0} ", c[i,j]);
                }
                Console.Write("\n");
            }
            Console.ReadKey();
        }
        static int [] generate(int [] X,int [,] P,int i,int j,int [] Pre) 
        {
            int [] newX = new int [X.Length+1];
            X.CopyTo (newX,0);
            if (i==0 || j == 0)
                return X;
            if (P[i - 1, j] == P[i - 1, j - 1] && P[i - 1, j] == P[i, j - 1] && P[i - 1, j - 1] < P[i, j])
            {
                newX[X.Length] = Pre[i];
                return generate(newX, P, i - 1, j - 1, Pre);
            }
            else if (P[i - 1, j]==P[i, j])
                return generate(X,P,i-1,j,Pre);
            else
                return generate(X, P, i , j-1, Pre);
        }
    }
}

带备忘机制的自顶向下算法

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApplication18
{
    class Program
    {
        static void Main(string[] args)
        {
            int xLength;
            int yLength;
            Console.WriteLine("Input the length of X : ");
            xLength = int.Parse(Console.ReadLine());
            Console.WriteLine("Input the length of Y : ");
            yLength = int.Parse(Console.ReadLine());
            int[,] c = new int[xLength + 1, yLength + 1];
            int[] x = new int[xLength + 1];
            int[] y = new int[yLength + 1];
            for (int i = 0; i <= xLength; i++)
            {
                Console.WriteLine("Input each element of X : ");
                x[i] = int.Parse(Console.ReadLine());
                c[i, 0] = 0;
            }
            for (int i = 0; i <= yLength; i++)
            {
                Console.WriteLine("Input each element of Y : ");
                y[i] = int.Parse(Console.ReadLine());
                c[0, i] = 0;
            }
            Memo_LSC_Length lsc = new Memo_LSC_Length(c, xLength, yLength, x, y);
            int[] res = lsc.Result();
            for (int i = 0; i < xLength; i++)
            {
                for (int j = 0; j < yLength; j++)
                {
                    Console.Write("{0} ", lsc.Record[i, j]);
                }
                Console.Write("\n");
            }
            for (int i = 0; i < res.Length; i++)
            {
                Console.Write("{0} ", res[i]);
            }
            Console.ReadKey();
        }
    }
    class Memo_LSC_Length
    {
        public Memo_LSC_Length(int[,] x, int xLength, int yLength, int[] m, int[] n)
        {
            Record = x;
            X = xLength;
            Y = yLength;
            M = m;
            N = n;
        }
        public int[,] Record
        {
            get;
            set;
        }
        public int X
        {
            get;
            set;
        }
        public int Y
        {
            get;
            set;
        }
        public int[] M
        {
            get;
            set;
        }
        public int[] N
        {
            get;
            set;
        }
        public void LSC_initial()
        {
            for (int i = 1; i <= X; i++)
            {
                for (int j = 1; j <= Y; j++)
                {
                    Record[i, j] = -1;
                }
            }
        }
        public int LSC_Length(int i, int j)
        {
            if (Record[i, j] >= 0)
                return Record[i, j];
            if (M[i] == N[j])
            {
                Record[i, j] = LSC_Length(i - 1, j - 1) + 1;
                return Record[i, j];
            }
            else
            {
                Record[i, j] = LSC_Length(i, j - 1) > LSC_Length(i - 1, j) ? LSC_Length(i, j - 1) : LSC_Length(i - 1, j);
                return Record[i, j];
            }
        }
        public int[] generate(int[] X, int[,] P, int i, int j, int[] Pre)
        {
            int[] newX = new int[X.Length + 1];
            X.CopyTo(newX, 0);
            //Console.Write("{0} ", newX[X.Length]);
            //Console.Write("Hello,world!!");
            if (i == 0 || j == 0)
            {
                return X;
            }
            if (P[i - 1, j - 1] < P[i, j])
            {
                newX[X.Length] = Pre[i];
                //Console.WriteLine("{0}", newX[X.Length]);
                return generate(newX, P, i - 1, j - 1, Pre);
            }
            else if (P[i - 1, j] == P[i, j])
                return generate(X, P, i - 1, j, Pre);
            else
                return generate(X, P, i, j - 1, Pre);
        }
        public int[] Result()
        {
            LSC_initial();
            LSC_Length(X, Y);
            int[] x = new int[0];
            x = generate(x, Record, X, Y, M);
            return x;
        }
    }
}


5个4000比特大状态置换算法的设计与分析 下面是 5 个概念性、实验性的 4000 位可逆置换设计。它们都保证是双射,但未经过密码分析,不可直接用于生产系统。风格分别覆盖:三维 SPN、Feistel、可逆元胞自动机、ARX、宽轨迹/Keccak 式结构。 这 5 个设计分别代表了 SPN、Feistel、元胞自动机、ARX、宽轨迹 Keccak 五种不同风格,覆盖了主流大状态置换的构造思路。再次强调:它们只是实验性概念,若要用于实际协议,必须经过严格安全性分析。 阅读详情

相关推荐

Revit二次开发之双事件:空闲事件与DocumentChanged事件

对以下文章所展示的代码进行了修改,当前展示的代码可直接复制使用。 由于本人初学,下列语言为个人理解,如有错误请指正。   《引用1》中: 使用模态对话框,或者尽量保证事件在ExternalCommand的Execute函数或者ExternalApplication的OnStartup函数里面注册。 如果一定要使用非模态对话框,那么请使用ExternalEvent事件的Raise函数,强迫...

一个Revit二次开发的实习生 6147

程序员编程艺术第十一章:最长公共子序列(LCS)问题

程序员编程艺术第十一章:最长公共子序列(LCS)问题 0、前言 程序员编程艺术系列重新开始创作了(前十章,请参考程序员编程艺术第一~十章集锦与总结)。回顾之前的前十章,有些代码是值得商榷的,因当时的代码只顾阐述算法的原理或思想,所以,很多的与代码规范相关的问题都未能做到完美。日后,会着力修善之。 搜遍网上,讲解这个LCS问题的文章不计其数,但...

dinongxu8804的博客 1538

告别ROS1!在Ubuntu 22.04上为VINS-Fusion适配ROS2 Humble的完整踩坑记录

本文详细记录了在Ubuntu 22.04上将VINS-Fusion从ROS1迁移到ROS2 Humble的完整过程,包括环境搭建、依赖管理、核心代码适配及性能优化。通过实战案例和调试技巧,帮助开发者高效解决迁移过程中的常见问题,提升系统稳定性和性能。

weixin_42628688的博客 281

lsc的啥吊日常(未完)

今天dfs MLE调了2小时,原因竟是........... sb的日常 之前没删freopen炸OJ,我错了,但我相信记录总会被打破 没事,我们一群250 hzoi yzh就是有素质,有眼光! 啊,证据确凿! (本片博客纯属课下娱乐,与人际关系问题无关!) 转载于:https://www.cnb...

weixin_30949361的博客 137

内网渗透(二)之基础知识-工作组介绍

在一个大型单位里,可能有成百上千台计算机互相连接组成局域网,它们都会列在"网络"(网上邻居)内。如果不对这些计算机进行分组,网络的混乱程度是可想而知的 为了解决这一问题,产生了工作组( Work Group)这个概念。将不同的计算机按功能(或部 门)分别列入不同的工作组,例如技术部的计算机都列入"技术部"工作组、行政部的计算机都 列入"行政部"工作组。要想访问某个部门的资源,只要在"网络"里双击该部门的工作组名 就可以看到该部门的所有计算机了。相比不分组的情况,这样的情况有序得多(尤其对大型局域网来说)。

把自己活成一道光,因为你不知道,谁会借着你的光,走出了黑暗。请保持心中的善良,因为你不知道,谁会借着你的善良,走出了绝望。请保持你心中的信仰,因为你不知道,谁会借着你的信仰,走出了迷茫。请相信自己的力量,因为你不知道,谁会因为相信你,开始相信了自己.... 1219

最强AI插件Augment,适配idea、vscode,对标cursor!

Augment是一款新兴的AI辅助编码工具,能够无缝集成到IDEA和VS Code等主流IDE中,直接对标专业AI编码工具Cursor。其核心优势包括多IDE适配、无缝集成、代码理解与生成以及对话式编程体验。Augment通过插件形式保留原IDE功能和快捷键习惯,降低学习成本,同时提供深度理解项目上下文和生成高质量代码的能力。此外,Augment还具备审查变更、检查点、代理与代理自动等核心功能,支持从简单配置更改到复杂功能实现的各种开发任务。Augment代表了AI辅助编程工具的新方向,通过增强开发者熟悉的

todoitbo的博客 1万+

[Algorithms] Using Dynamic Programming to Solve longest common subsequence problem

Let's say we have two strings: str1 = 'ACDEB' str2 = 'AEBC' We need to find the longest common subsequence, which in this case should be 'AEB'.   Using dynamic programming, we want to compare by ...

weixin_34115824的博客 194

《Android系统开发中高级定制专栏导读》

欢迎来到【Android 中高级系统定制】专栏!在这里,将深入探讨Android系统开发与定制的方方面面,涵盖从权限管理、驱动开发到系统应用配置等多个领域。

我其实什么都不会 1579

视频隐私脱敏工程化:CSRT/KCF追踪算法在本地推理中的实现与边界

在短视频内容合规审查中,动态遮挡(Dynamic Masking)是高频且高耗时的环节。传统手动关键帧打码不仅效率低下,且在目标快速移动或遮挡时极易出现遮罩漂移。本文从计算机视觉工程角度,解析基于CSRT与KCF算法的目标追踪方案在视频隐私处理中的技术路径、性能权衡及落地实践。

Mysssone的博客 218

基于 YOLOv26 的食品包装缺陷检测系统:智能视觉质检方案

本文提出了一种基于YOLOv26深度学习的食品包装缺陷智能检测系统。该系统能够自动识别多种常见包装缺陷,包括密封不良、破损、污染、标签错误等8类问题。相比传统人工检测方法,该系统具有高精度、多类别分类、实时推理等优势。文章详细介绍了系统架构,包含数据采集、预处理、YOLOv26检测模型和后处理四个核心模块,并提供了完整的环境配置和数据处理代码实现。该系统为食品包装行业提供了一种高效、准确的智能视觉质检解决方案。

一键难忘的博客 683

【STK】手把手教你利用STK进行光电红外仿真04-STK/EOIR模块的实战操作1航天器星载相机对LEO卫星成像

今天引入一个实际的场景,帮助大家完成对于这个模块的理解与运用。

weixin_44184852的博客 2417

【算法拾光】链表 哈希表|K个一组翻转链表 + 两数之和

K个一组翻转链表需分段反转,借助哑节点与前驱指针维护连接,避免断链;两数之和利用哈希表实现O(1)查找,空间换时间,高效定位目标组合。前者考察链表指针操作,后者聚焦映射关系构建,均为面试高频题。

wuqingyigexiaoba的博客 314

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

排序算法深度笔记(下):非比较类排序的线性突破与工程边界

排序算法时间复杂度额外空间复杂度稳定性是否基于比较选择排序O(N^2)(O(1))不稳定是冒泡排序O(N^2)(O(1))稳定是插入排序O(N^2)(O(1))稳定是归并排序O(N\log N)(O(N))稳定是快速排序O(N\log N)O(log N)不稳定是堆排序O(N\log N)O(1)不稳定是计数排序(O(N + M))O(M))稳定否基数排序O(N)稳定否桶排序平均O(N) / 最坏O(N^2)

2401_87069538的博客 589

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

算法日常・每日刷题--<动态规划>42

本题为“不相交的线”,与最长公共子序列问题相似。使用动态规划求解:定义 dp[i][j] 表示 nums1[0:i] 与 nums2[0:j] 的最大不相交连线数。若元素相等,则继承左上值加1;否则取上方或左方最大值。最终返回 dp[m][n],即两数组的最大不相交连线数。时间复杂度 O(mn),空间复杂度 O(mn)。

2503_92261635的博客 20

C语言程序设计题|有序数组插入数字冒泡排序

题目要求将一个数插入有序数组末尾,并用冒泡排序实现整体升序。代码先将输入数存入数组最后位置,再通过双重循环进行冒泡排序,每轮将较大元素向后移动,最终输出11个升序元素。该方法虽时间复杂度为O(n²),但符合题目要求,逻辑清晰,适合初学者理解排序原理。

2301_81429079的博客 750

【算法拾光】模拟|外观数列 + 数青蛙

本文总结两道模拟题解法:外观数列通过迭代统计连续数字个数生成下一项,关键在于处理末尾字符;数青蛙则模拟青蛙叫声“croak”状态转移,维护各阶段青蛙数量,记录最大并发数并确保全部完成。共性在于严格遵循流程、细致处理边界与非法情况,锻炼字符串遍历与状态管理能力。

wuqingyigexiaoba的博客 370

牛客周赛165C题(前后缀性质,递推,排序,枚举)

题目大意:给定长度为 `n` 的数组,选择 `k ∈ [1,n]`,将前 `k` 个元素整体翻转,后面的元素不变。要求操作后的整个数组非递减,统计满足条件的 `k` 的数量。题目链接:https://ac.nowcoder.com/acm/contest/141721/C。时间复杂度:O(nlogn)

2501_94316951的博客 171

408 算法 04|主元素与三元组最小距离:两种“扫描时做决定“的思路

2013(41) 的主元素用摩尔投票一遍选出候选,但真正的考点是"选完必须验票";2020(41) 的三元组最小距离,三指针每次只挪最小的那个,靠的是 D=2×(max−min) 这个恒等式。两套完整 C 代码加真实输出,附官方评分档位表。

m0_56226131的博客 409

【数据结构-3】算法美学之降复杂度

在while循环的循环体内,首先用临时变量保存最后一个位置的数据,再通过for循环把所有元素往后移动一位,最后把tmp中保存的值放到下标为0的位置上去。方法二的思路是:创建新数组,让原数组中后k个数据移动到新数组中前面的位置,让原数组中前numsSize-k个数据移动到新数组中后面的位置,这。这段代码的思路是:三次逆置,第一次逆置前numsSize-k个数据,第二次逆置后k个数据,最后整体逆置。这篇博文分享一道解法不一的算法题,求解过程的目的在于降低算法的时间复杂度,题源力扣。,属于空间换时间的操作。

weixin_44218929的博客 85

算法61,判定是否为字符重排

两字符串能互为重排 ⇔。

sheshibenniaodan的博客 218

算法日常・每日刷题--<动态规划>32

给定严格递增的正整数数组,求最长斐波那契子序列长度。使用二维DP,dp[i][j]表示以arr[i]、arr[j]为最后两项的序列长度,初始化均为2。通过哈希表快速查找前一项target = arr[j] - arr[i],若存在且下标小于i,则状态转移:dp[i][j] = dp[k][i] + 1。遍历更新全局最大长度,最终若结果小于3则返回0。时间复杂度O(n²),空间复杂度O(n²)。

2503_92261635的博客 178

算法札记:几何分布在算法题UVA1262的运用

集卡问题求解核心:将集齐n种优惠券的过程分为n个阶段,每个阶段期望购买次数为 $ \frac{n}{k} $(k为剩余种类数),总期望为 $ n \cdot H_n $(调和数)。通过自洽方程推导单阶段期望,无需几何分布或无穷级数,逻辑清晰且适用于大一水平。例如,n=5时期望约11.42,非5。题目要求以带分数形式输出精确结果,算法上需累加分数并化简。

Keven_11的博客 351

SSL证书选RSA还是ECDSA:公钥算法、CA签名与兼容性怎么核对

申请SSL证书时,RSA和ECDSA该怎么选?先分清站点公钥算法、CA签名算法和TLS实际兼容性,再用隔离OpenSSL实验读取两类材料,核对申请、续期和部署交接,避免只看Signature Algorithm就选错。

谁呀!的博客 399

考拉兹猜想 - 7

本文通过引入虚数单位重构Collatz猜想的迭代逻辑,指出偶数减半与奇数“乘3加1”的过程在虚数坐标下等价于归结操作。关键在于:乘3加1使奇数跃升至偶数,随后持续减半,而虚数单位代表“无限减1”,实现无限向有限的转化。无论初始值如何,减半始终主导,最终归结为4-2-1循环。该视角消解了正向思维中的速度竞争疑虑,证明归结是必然结果。

杨铸人的博客 42
上一篇: SML-Dplab
下一篇: Dynamic programming - 最长单调递增子串问题
Numlogn
博客等级 码龄10年 1粉丝 17原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值