Educoder算法题
平平无奇的CV
不加班的CV工程师
展开
-
DP最大子段和问题(动态规划)
问题:有n个整数组成一个a1,a2,a3,… ,an序列。求其子段和的最大值(子段是连续的)比如{-2,11,-4,13,-5,-2},最大子段和就是11-4+13=20解题思路:这是一个很典型的动态规划性质的题目,我们先设置一个dp数组dp[i]表示以a[i]为结尾的子段的最大子段和。这里注意一定要以a[i]结尾而不是a[1]到a[i]间任意子段,因为这样有利于利用与维护其最优子结构性质得到递推式:(1)dp[i]=dp[i-1]+a[i]-------当dp[i-1]&原创 2022-04-21 09:23:35 · 344 阅读 · 0 评论 -
矩阵连乘问题
问题描述:在计算矩阵连乘积时,加括号的方式对计算量有影响。例如有三个矩阵A1,A2,A3连乘,它们的维数分别为10*100,100*5,5*50。用第一种加括号方式(A1A2)A3计算,则所需数乘次数为10*100*5+10*5*50=7500。用第二种加括号方式A1(A2A3)计算,需要100*5*50+10*100*50=75000次数乘。输入连乘矩阵的个数,每个矩阵的维数。要求输出最少数乘次数。相关知识输入格式第一行输入一个n,代表有n个矩阵接下来n行,每行输入两个数a,原创 2022-04-21 08:14:58 · 765 阅读 · 0 评论 -
棋盘覆盖问题
问题描述:在一个2k×2k个方格组成的棋盘中,恰有一个方格与其他方格不同,称该方格为一特殊方格,且称该棋盘为一特殊棋盘。在棋盘覆盖问题中,要用图示的4种不同形态的L型骨牌覆盖给定的特殊棋盘上除特殊方格以外的所有方格,且任何2个L型骨牌不得重叠覆盖。易知,覆盖任意一个2k×2k的特殊棋盘,用到的骨牌数恰好为(4K-1)/3。输入格式第一行为k(棋盘的尺寸),第二行为x,y(1<=x,y<=2^k),分别表示特殊方格所在行与列。输出格式共2^k行,分别表示覆盖该格的L型的编原创 2022-04-20 22:12:42 · 165 阅读 · 0 评论 -
全排列问题(有重复元素)
原理:递归与分治问题描述:设集合R={r1,r2,...,rn}是要进行排列的n个元素,其中r1,r2,...,rn可能相同。试着设计一个算法,列出R的所有不同排列。即,给定n以及待排的n个可能重复的元素。计算输出n个元素的所有不同排列。测试输入:4aacc预期输出:aaccacacaccacaaccacaccaa6c++代码:#include <bits/stdc++.h>using namespace std;const int N=101;...原创 2022-04-20 20:34:32 · 1636 阅读 · 0 评论 -
斐波那契-大数加法-数组解法
Fibonacci数列的递推公式为:Fn=Fn-1+Fn-2(n>=2,n∈N*),前几项为,(1,1,2,3,5,8,13。。。)用longlong来递推在第93项就会溢出,因此采用数组解法求斐波那契的前n项#include<bits/stdc++.h>using namespace std;#define MLEN 400//定义最大长度 int len( int a[][MLEN],int i ){//确定数据长度 int len=0; while(a[i][原创 2022-03-05 14:49:31 · 258 阅读 · 0 评论 -
字典序问题
《计算机算法设计与分析》中第一章的第二道题-字典序问题。题目如下:在数据加密和数据压缩中常需要对特殊的字符串进行编码。给定的字母表A由26个小写字母组成。该字母表产生的升序字符串中字母从左到右出现的次序与字母在字母表中出现的次序相同,且每个字符最多出现1次。例如,a,b,ab,bc,xyz等字符串都是升序字符串。现在对字母表中产生的所有长度不超过6的升序字符串,计算它在字典中的编码。1 2 ... 26 27 28 ...a b ... z...原创 2022-03-05 00:40:15 · 1237 阅读 · 0 评论 -
整数划分问题
问题描述:将正整数n 表示成一系列正整数之和,n=n1+n2+…+nk, 其中n1>=n2>=…>=nk>=1 ,k>=1 。正整数n 的这种表示称为正整数n 的划分。正整数n 的不同的划分个数称为正整数n 的划分数。解法原理:递归与分治代码:#include <bits/stdc++.h>using namespace std;const int N=100;int Q(int n,int m){//Q(n,m)对数n进行划分,最大的数不超原创 2022-04-20 17:25:27 · 988 阅读 · 0 评论