动态规划算法刷题笔记【线性dp】

news2024/11/19 1:25:48

递推

斐波那契(Fibonacii)数列的递推公式:F(n) = F(n -1) + F(n - 2)

错排问题:F(n) = (n-1) * [F(n-1)+F(n-2)]
解释

例题

一只青蛙一次可以跳上1级台阶,也可以跳上2级台阶。求该青蛙跳上一个 10 级的台阶总共有多少种跳法

思路

  • 要想跳到第10级台阶,要么是先跳到第9级,然后再跳1级台阶上去;要么是先跳到第8级,然后一次迈2级台阶上去。
  • 同理,要想跳到第9级台阶,要么是先跳到第8级,然后再跳1级台阶上去;要么是先跳到第7级,然后一次迈2级台阶上去。
  • 要想跳到第8级台阶,要么是先跳到第7级,然后再跳1级台阶上去;要么是先跳到第6级,然后一次迈2级台阶上去。

f(10) = f(9)+f(8)
f (9) = f(8) + f(7)
f (8) = f(7) + f(6)

f(3) = f(2) + f(1)

即通用公式为: f(n) = f(n-1) + f(n-2)

动态规划

  • 根据一类多阶段问题的特点,把多阶段决策问题变换为一系列互相联系的单阶段问题,然后逐个加以解决
  • 最优化原理,动态规划算法通常用于求解具有某种最优性质的问题。*在这类问题中,可能会有许多可行解。每一个解都对应与一个值,找到具有最优值的解
  • 用一个表来记录所有已解的子问题的答案。不管该子问题以后是否被用到,只要它被计算过,就将其结果填入表中。这就是动态规划的基本思路。

基本思路

  1. 穷举分析:当台阶数是1的时候,有一种跳法,f(1) =1;当只有2级台阶时,有两种跳法,第一种是直接跳两级,第二种是先跳一级,然后再跳一级。即f(2) = 2;当台阶是3级时,想跳到第3级台阶,要么是先跳到第2级,然后再跳1级台阶上去,要么是先跳到第 1级,然后一次迈 2 级台阶上去。所以f(3) = f(2) + f(1) =3;当台阶是4级时,想跳到第3级台阶,要么是先跳到第3级,然后再跳1级台阶上去,要么是先跳到第 2级,然后一次迈 2 级台阶上去。所以f(4) = f(3) + f(2) =5;当台阶是5级时…
  2. 确定边界:通过穷举分析,我们发现,当台阶数是1的时候或者2的时候,可以明确知道青蛙跳法。f(1) =1,f(2) = 2,当台阶n>=3时,已经呈现出规律f(3) = f(2) + f(1) =3,因此f(1) =1,f(2) = 2就是青蛙跳阶的边界。
  3. 找规律,确定最优子结构:n>=3时,已经呈现出规律 f(n) = f(n-1) + f(n-2) ,因此,f(n-1)和f(n-2) 称为 f(n) 的最优子结构。一道动态规划问题,其实就是一个递推问题。假设当前决策结果是f(n),则最优子结构就是要让 f(n-k) 最优,最优子结构性质就是能让转移到n的状态是最优的,并且与后面的决策没有关系,即让后面的决策安心地使用前面的局部最优解的一种性质当前在哪,可能从哪里来
  4. 写出状态转移方程:穷举分析,确定边界,最优子结构,我们就可以得出状态转移方程

需满足的条件

  • 最优化原理:一个过程的最优决策具有这样的性质:即无论其初始状态和初始决策如何,其今后的各个策略对以第一个决策所形成的状态作为初始状态的过程而言,必须构成最优策略。也就是说一个最优策略的子策略,也是最优的。
  • 无后效性:如果某阶段状态给定后,则在这个阶段以后过程的发展不受这个阶段以前各个状态的影响

动态规划与贪心的区别

区别
网上找的,比较好理解的

  • 贪心算法的思路和动态规划有点不一样(个人觉得贪心算法会更简单一点)
  • 动态规划需要枚举每一种最优解的情况(具体就如链接中的最后的凑钱问题:4+1+1、3+3)

最长上升子序列LIS

在这里插入图片描述

子序列不一定是连续的

[NOIP1999]拦截导弹

某国为了防御敌国的导弹袭击,发展出一种导弹拦截系统。但是这种导弹拦截系统有一个缺陷:虽然它的第一发炮弹能够到达任意的高度,但是以后每一发炮弹都不能高于前一发的高度。某天,雷达捕捉到敌国的导弹来袭。由于该系统还在试用阶段,所以只有一套系统,因此有可能不能拦截所有的导弹。
输入导弹依次飞来的高度(雷达给出的高度数据是不大于30000的正整数),计算这套系统最多能拦截多少导弹,如果要拦截所有导弹最少要配备多少套这种导弹拦截系统。

输入描述

1行,若干个整数(个数≤100000)

输出描述

2行,每行一个整数,第一个数字表示这套系统最多能拦截多少导弹,第二个数字表示如果要拦截所有导弹最少要配备多少套这种导弹拦截系统。

示例一
输入

389 207 155 300 299 170 158 65

输出

6
2

思路

  • 题目中给出的 不能高于 ,易知:最长不上升序列
  • 题目问的 最少要配备多少套导弹拦截系统 :即遇到后面的比前面的大的时候(也就是不满足不上升序列),就需要加一套系统
  • 比较基础这道题,难度低,套模板

题解

#include<bits/stdc++.h>
using namespace std;
int n=1,a[100005],dp1[100005],dp2[100005],ans1=-1,ans2=-1;
int main(){
    while(cin>>a[n]) ++n;
    for(int i=1;i<n;++i){
        dp1[i]=1,dp2[i]=1;
        for(int j=1;j<i;++j){
            if(a[i]<=a[j]) dp1[i]=max(dp1[i],dp1[j]+1); //状态转移方程
            else dp2[i]=max(dp2[i],dp2[j]+1);
        }
        ans1=max(dp1[i],ans1);
        ans2=max(dp2[i],ans2);
    }
    printf("%d\n%d",ans1,ans2);
}

状态转移方程:dp1[i] 表示的是第 i 个位置能达到的最长不上升子序列dp数组一般都是取右端点或者是终点;dp2[i] 表示的是第 i 个位置能达到的最长上升子序列

[NOIP2004 提高组] 合唱队形

n n n 位同学站成一排,音乐老师要请其中的 n − k n-k nk 位同学出列,使得剩下的 k k k 位同学排成合唱队形。

合唱队形是指这样的一种队形:设 k k k 位同学从左到右依次编号为 1 , 2 , 1,2, 1,2, , k ,k ,k,他们的身高分别为 t 1 , t 2 , t_1,t_2, t1,t2, , t k ,t_k ,tk,则他们的身高满足 t 1 < ⋯ < t i > t i + 1 > t_1< \cdots <t_i>t_{i+1}> t1<<ti>ti+1> > t k ( 1 ≤ i ≤ k ) >t_k(1\le i\le k) >tk(1ik)

你的任务是,已知所有 n n n 位同学的身高,计算最少需要几位同学出列,可以使得剩下的同学排成合唱队形。

输入格式

共二行。

第一行是一个整数 n n n 2 ≤ n ≤ 100 2\le n\le100 2n100),表示同学的总数。

第二行有 n n n 个整数,用空格分隔,第 i i i 个整数 t i t_i ti 130 ≤ t i ≤ 230 130\le t_i\le230 130ti230)是第 i i i 位同学的身高(厘米)。

输出格式

一个整数,最少需要几位同学出列。

样例输入 #1

8
186 186 150 200 160 130 197 220

样例输出 #1

4

提示

对于 50 % 50\% 50% 的数据,保证有 n ≤ 20 n \le 20 n20

对于全部的数据,保证有 n ≤ 100 n \le 100 n100

思路

  • 2遍lis,从左往右最长上升,从右往左最长上升
  • dp[0][i]表示 i 位置(包括i)的最长上升子序列长度从左往右,dp[1][i]表示 从右往左
  • 最后,将从左往右和从右往左相加起来-1(因为ti计算了2次),得到最大值时,便可以知道需要减去人数的最小值

题解

#include<bits/stdc++.h>
using namespace std;
int n,a[105],ans=0,dp[2][105];
int main(){
    scanf("%d",&n);
    for(int i=1;i<=n;++i) scanf("%d",&a[i]),dp[0][i]=1,dp[1][i]=1;
    for(int i=2;i<=n;++i) for(int j=1;j<i;++j) if(a[i]>a[j]) dp[0][i]=max(dp[0][i],dp[0][j]+1);
    for(int i=n-1;i>=1;--i) for(int j=n;j>i;--j) if(a[i]>a[j]) dp[1][i]=max(dp[1][i],dp[1][j]+1);
    for(int i=1;i<=n;++i) ans=max(dp[0][i]+dp[1][i]-1,ans);
    printf("%d",n-ans);
}

最长公共子序列LCS

在这里插入图片描述
在这里插入图片描述

[HAOI2010]最长公共子序列

字符序列的子序列是指从给定字符序列中随意地(不一定连续)去掉若干个字符(可能一个也不去掉)后所形成的字符序列。
令给定的字符序列X=“x0,x1,…,xm-1”,序列Y=“y0,y1,…,yk-1”是X的子序列,存在X的一个严格递增下标序列 < i0,i1,…,ik-1 > ,使得对所有的j=0,1,…,k-1,有xij = yj。例如,X=“ABCBDAB”,Y=“BCDB”是X的一个子序列。对给定的两个字符序列,求出他们最长的公共子序列长度,以及最长公共子序列个数。

输入描述

第1行为第1个字符序列,都是大写字母组成,以”.”结束。长度小于5000。
第2行为第2个字符序列,都是大写字母组成,以”.”结束,长度小于5000。

输出描述

第1行输出上述两个最长公共子序列的长度。
第2行输出所有可能出现的最长公共子序列个数,答案可能很大,只要将答案对100,000,000求余即可。

示例一
输入

ABCBDAB.
BACBBD.

输出

4
7

思路

  • 第一问很简单了,就是模板
  • 第2问的分析:要求长度为 dp(i, j) 的 LCS 的个数,只需要知道长度为 dp(i, j) 转移来源的 LCS 的个数,我们就可以推出最终的答案
  • 但是如果开2个二维数组[5005][5005]会出现MLE,占用空间过大的情况,所以要用滚动数组来优化

题解

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxn = 5e3 + 10, mod = 1e8;
int n, m, k;
char ch, a[maxn], b[maxn];
ll f[2][maxn], g[2][maxn];
int main(){
    for (int i = 1; (ch = getchar()) != '.'; a[i] = ch, n = i, i++) ;
    getchar();
    for (int i = 1; (ch = getchar()) != '.'; b[i] = ch, m = i, i++) ;
    for (int i = 0; i <= m; i++) g[0][i] = 1; g[1][0] = 1;
    for (int i = 1; i <= n; i++, k ^= 1){
        for (int j = 1; j <= m; j++){
            g[k ^ 1][j] = 0;
            f[k ^ 1][j] = (a[i] == b[j]) ? f[k][j - 1] + 1 : max(f[k][j], f[k ^ 1][j - 1]);
            if (a[i] == b[j]) g[k ^ 1][j] += g[k][j - 1];
            if (f[k ^ 1][j] == f[k ^ 1][j - 1]) g[k ^ 1][j] += g[k ^ 1][j - 1];
            if (f[k ^ 1][j] == f[k][j]) g[k ^ 1][j] += g[k][j];
            if (f[k ^ 1][j] == f[k][j - 1]) g[k ^ 1][j] -= g[k][j - 1];
            g[k ^ 1][j] %= mod;
        }
    }
    printf("%lld\n%lld\n", f[k][m], g[k][m]);
    return 0;
}

字符串编辑距离

表示2个字符串之间,由一个字符串转化到另一个字符串所需的最少操作次数。也就是说,编辑距离越小,2个字符串的相似度越大。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

编辑距离

A A A B B B 是两个字符串。我们要用最少的字符操作次数,将字符串 A A A 转换为字符串 B B B。这里所说的字符操作共有三种:

  1. 删除一个字符;
  2. 插入一个字符;
  3. 将一个字符改为另一个字符。

A , B A, B A,B 均只包含小写字母。

输入格式

第一行为字符串 A A A;第二行为字符串 B B B;字符串 A , B A, B A,B 的长度均小于 2000 2000 2000

输出格式

只有一个正整数,为最少字符操作次数。

样例输入 #1

sfdqxbw
gfdgw

样例输出 #1

4

提示

对于 100 % 100 \% 100% 的数据, 1 ≤ ∣ A ∣ , ∣ B ∣ ≤ 2000 1 \le |A|, |B| \le 2000 1A,B2000


思路

  • 模板题,难度不大,甚至没什么要注意的

题解

#include<bits/stdc++.h>
using namespace std;
char a[2005],b[2005];
int main(){
    scanf("%s%s",a,b);
    int n1=strlen(a),n2=strlen(b),dp[2005][2005];
    for(int i=1;i<=n1;++i) dp[i][0]=i;
    for(int i=1;i<=n2;++i) dp[0][i]=i;
    for(int i=1;i<=n1;++i){
        for(int j=1;j<=n2;++j){
            if(a[i-1]==b[j-1]) dp[i][j]=dp[i-1][j-1];
            else dp[i][j]=min(min(dp[i][j-1],dp[i-1][j]),dp[i-1][j-1])+1;
        }
    }
    printf("%d",dp[n1][n2]);
}

虽然纯模板题,但是在写的时候遇到了一点小问题

  • 用scanf()读到的 a b,起始位置是a[0],b[0]。
  • 而在后面 if(a[i-1]==b[j-1])这里,一开始写成了 a[i]==b[j],没有注意到位置数组位置

序列求和问题

最大子串和

给你一个数组 a ,包含 n 个整数,你需要在其中选择连续的几个(至少一个)数,使得它们的和最大,求出最大的和。

输入描述

在这里插入图片描述

输出描述

输出一行,一个整数,表示最大字串和。

示例一
输入

6
1 -2 5 2 -3 5

输出

9

说明

可以选择区间[3,6]的子串,他们的和为 5+2-3+5=9

示例二
输入

8
-3 2 -3 2 2 -1 3 -2

输出

6

思路

  • 用sum表示当前子串和,如果sum<0,就没有再继续使用这个子串和的必要了(因为,往后随便找个正数都比当前的子串和大)

题解

#include<bits/stdc++.h>
using namespace std;
int n,a[1000010],j=1;
long long sum,ans;
int main(){
    scanf("%d",&n);
    for(int i=1;i<=n;i++)scanf("%d",&a[i]);
    while(j<=n){
        while(sum>=0&&j<=n){   //这里的j<=n有必要,防止数组越界
            sum+=a[j++];
            ans=max(ans,sum);
        }
        sum=0;
    }
    printf("%lld",ans);
}

数字三角形

这种类型的题,能清楚地发现贪心与动态规划的区别

[USACO1.5][IOI1994]数字三角形 Number Triangles

观察下面的数字金字塔。

写一个程序来查找从最高点到底部任意处结束的路径,使路径经过数字的和最大。每一步可以走到左下方的点也可以到达右下方的点。

        7 
      3   8 
    8   1   0 
  2   7   4   4 
4   5   2   6   5 

在上面的样例中,从 7 → 3 → 8 → 7 → 5 7 \to 3 \to 8 \to 7 \to 5 73875 的路径产生了最大

输入格式

第一个行一个正整数 r r r ,表示行的数目。

后面每行为这个数字金字塔特定行包含的整数。

输出格式

单独的一行,包含那个可能得到的最大的和。

样例输入 #1

5
7
3 8
8 1 0
2 7 4 4
4 5 2 6 5

样例输出 #1

30

提示

【数据范围】
对于 100 % 100\% 100% 的数据, 1 ≤ r ≤ 1000 1\le r \le 1000 1r1000,所有输入在 [ 0 , 100 ] [0,100] [0,100] 范围内。

思路

  • 如果不是因为在学动态规划,那么在思考的时候可能也会想到搜索,但是对于这类题,搜索会TLE
  • 如果是贪心的话(从上往下),在样例中,会走 7 → 8 → 1 → 7 → 5 7 \to 8 \to 1 \to 7 \to 5 78175,但是没有题目中给出的路径和大。说明:贪心保证的是每一步的最优,但是并非总体最优。所以选择贪心算法的时候,应该要考虑每一步最优所达到的总体解是否会出现较明显的漏洞
  • (补充)从下往上,贪心的方法也可以。从倒数第2排开始,最左边是2,那么它往下会选择5,就将其置换为2+5=7。以此类推,倒数第3排最左边是8,其下方2个是7和12。所以8置换成20。推到第1排:7下方是23和21,选择23。得到答案30这种方法相当于做了个前缀和,考虑了路径,也可以理解为动态规划的方法吧

题解

#include<bits/stdc++.h>
using namespace std;
int n,a[1005][1005];
int main(){
    scanf("%d",&n);
    for(int i=1;i<=n;++i)for(int j=1;j<=i;++j) scanf("%d",&a[i][j]);
    for(int i=n-1;i>=1;--i){
        for(int j=1;j<=i;++j) a[i][j]+=max(a[i+1][j],a[i+1][j+1]);
    }
    printf("%d",a[1][1]);
}

矩阵相关

最大正方形

在一个 n × m n\times m n×m 的只包含 0 0 0 1 1 1 的矩阵里找出一个不包含 0 0 0 的最大正方形,输出边长。

输入格式

输入文件第一行为两个整数 n , m ( 1 ≤ n , m ≤ 100 ) n,m(1\leq n,m\leq 100) n,m(1n,m100),接下来 n n n 行,每行 m m m 个数字,用空格隔开, 0 0 0 1 1 1

输出格式

一个整数,最大正方形的边长。

样例输入 #1

4 4
0 1 1 1
1 1 1 0
0 1 1 0
1 1 0 1

样例输出 #1

2

思路

  • 状态转移方程:f[i][j]=min(min(f[i-1][j],f[i][j-1]),f[i-1][j-1])+1
  • f[i][j]表示的是以数组a[i][j]为右下结点时,最大的正方形边长
  • 当a[i][j]==1时,进行状态转移这个不多解释了。对于 min 是因为,当a[i][j]==0时,f[i][j]=0,如果不是min的话,会出现长方形

题解

#include<bits/stdc++.h>
using namespace std;
int n,m,a[105][105],f[105][105],ans=-1;
int main(){
    scanf("%d%d",&n,&m);
    for(int i=1;i<=n;++i){
        for(int j=1;j<=m;++j){
            scanf("%d",&a[i][j]);
            if(a[i][j]==1) f[i][j]=min(min(f[i-1][j],f[i][j-1]),f[i-1][j-1])+1;
            ans=max(ans,f[i][j]);
        }
    }
    printf("%d",ans);
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/148031.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

代码随想录算法训练营第4天 24.两两交换链表中的节点、19. 删除链表的倒数第N个节点、160.链表相交

代码随想录算法训练营第4天 24.两两交换链表中的节点、19. 删除链表的倒数第N个节点、160.链表相交 两两交换链表中的节点 力扣题目链接(opens new window) 给定一个链表&#xff0c;两两交换其中相邻的节点&#xff0c;并返回交换后的链表。 你不能只是单纯的改变节点内部…

C++中的多态

目录 多态的定义及实现 多态的构成条件 虚函数 虚函数重写 虚函数重写的两个例外&#xff1a; override 和 final(C11) 重载、覆盖(重写)、隐藏(重定义)的对比 抽象类 多态的原理 虚函数表 多态的概念&#xff1a;字面的意思就是多种形态&#xff0c;完成某个行为&…

利用MDK的FLM文件生成通用flash驱动

文章目录前言一、FLM文件是什么&#xff1f;二、FLM文件结构1.FlashPrg.c2.FlashPrg.c三、解析FLM文件1.解析flm文件四、设计flash驱动抽象层五、快速使用前言 在进行Flash操作时&#xff0c;一般我们需要设计一套Flash抽象层&#xff0c;至少要包括flash的init&#xff0c;re…

C++STL之stack容器和优先级队列底层详解

一&#xff1a;stack容器1.1&#xff1a;容器适配器概念&#xff1a;容器适配器是用特定类封装作为其底层的容器&#xff0c;并提供一组特定的成员函数来访问元素&#xff0c;stack的底层容器可以是任意的类模板&#xff0c;或者一些其他的容器类&#xff0c;这些容器类应该支持…

JavaScript详解

目录 1.JavaScript基础知识 1.1 JavaScript概述 1.1.1 JavaScript历史 1.1.2 JavaScript是什么 1.1.3 JavaScript的作用 1.1.4 HTML/CSS/JS的关系 1.1.5 基本特点 1.1.6 浏览器执行JS简介 1.1.7 JavaScript脚本语言的组成 1.2 JavaScript使用方法 1.3 JavaScript输…

论文创新及观点2

题目 Zero-Shot Visual Recognition using Semantics-Preserving Adversarial Embedding Networks 摘要 基于visual-semantic embedding&#xff0c;的ZSL方法存在信息损失(semantic loss),的问题&#xff0c;在训练过程中&#xff0c;如果某些语义信息对分类的区分性不大&a…

「项目管理」如何做好研发FO角色?

角色定位 FO &#xff08;Feature Owner&#xff09;&#xff0c;项目某一阶段/版本迭代生命周期的总负责人。基于从需求发起、研发接入、上线等项目过程阶段&#xff0c;可以根据职责本位不同来推荐具体项目成员、干系人担任FO角色&#xff0c;前端、 客户端 、服务端、测试、…

Spring事务和事务传播机制

⭐️前言⭐️ 事务是作为一名后端程序员&#xff0c;必须去要了解清楚的东西&#xff0c;因为它决定了程序的正常运行以及与程序运行效率之间的权衡&#xff0c;这篇文章我们就来了解一下Spring事务和事务传播机制。 &#x1f349;欢迎点赞 &#x1f44d; 收藏 ⭐留言评论 &am…

【阶段三】Python机器学习08篇:机器学习项目实战:决策树分类模型

本篇的思维导图: 决策树模型简介 决策树模型的基本原理是通过对一系列问题进行if/else的推导,最终实现相关决策。 下图所示为一个典型的决策树模型——员工离职预测模型的简单演示。该决策树首先判断员工满意度是否小于5,若答案为“是”,则认为该员工会离…

07、ThingsBoard本地打镜像上传到harbor

1、Harbor是什么? Harbor是为企业用户设计的容器镜像仓库开源项目,包括了权限管理(RBAC)、LDAP、审计、安全漏洞扫描、镜像验真、管理界面、自我注册、HA等企业必需的功能,同时针对中国用户的特点,设计镜像复制和中文支持等功能。 2、安装Harbor 2.1、下载地址 Tags g…

【看表情包学Linux】探讨项目构建问题 | Makefile | 依赖关系与依赖方法 | 伪目标 PHONY

&#x1f923; 爆笑教程 &#x1f449; 《看表情包学Linux》&#x1f448; 猛戳订阅 &#x1f525; &#x1f4ad; 写在前面&#xff1a;本章我们要学习的是 makefile。会不会写 makefile&#xff0c;从一个侧面说明一个人是否具备完成大型工程的能力。一个工程中的源文件不计…

学计算机专业的你后悔了吗?

先说结论&#xff1a;不后悔。当年高考的时候&#xff0c;老师和我们说&#xff0c;将来环境、船舶、园林专业肯定特别吃香&#xff0c;填志愿的时候记得都选上。现在来看&#xff0c;这几个专业妥妥的天坑专业&#xff0c;前段时候还认识一个船舶专业的博士报培训班转计算机&a…

【GNN】图基本知识代码、nxworkx包的基本使用

一个写得很好的博客&#xff1a; 图或网络中的中心性&#xff1a;点度中心性、中介中心性、接近中心性、特征向量中心性、PageRank 特征向量中心性&#xff08;eigenvector centrality&#xff09; 特征向量中心性的基本思想是&#xff0c;一个节点的中心性是相邻节点中心性的函…

Kali Linux渗透测试小实践——Metasploit与后门木马

一、环境和工具准备 1.Metasploit Metasploit是一款开源的安全漏洞检测工具&#xff0c;可以帮助安全和IT专业人士识别安全性问题&#xff0c;验证漏洞的缓解措施&#xff0c;并管理专家驱动的安全性进行评估&#xff0c;提供真正的安全风险情报。这些功能包括智能开发&#…

MySQL常用基础 - 小白必看

MySQL数据库基本操作 一、DDL 概念&#xff1a;是一个数据定义语言 该语言部分包括&#xff1a; 1、对数据库的常用操作 创建数据库&#xff1a; 1、create database 数据库名 (直接删除) 2、create database if not exists 数据库名 &#xff08;判断数据库是否存在&…

Allegro174版本新功能介绍之去掉拷贝自动偏移功能

Allegro174版本新功能介绍之去掉拷贝自动偏移功能 Allegro升级到了174版本的时候,在用拷贝功能的时候,不管怎么拷贝都会出现偏差,即便是拷贝坐标的方式,如下图 那是因为174新增了一个自动粘贴的功能,按照下面的步骤可以去除自动粘贴的功能,具体操作如下 选择Setup选择Use…

1.《计算机组成原理》之初识计算机系统

一、基本内容&#xff1a;基本部件的结构和组织方式。基本运算的操作原理。基本部件和单元的设计思想。二、特色&#xff1a;计算机组成的一般原理&#xff0c;不以具体机型为依托。采用自顶向下的方式、层层细化。三、补充&#xff1a;一、基本内容&#xff1a;1.这门课讲什么…

【JavaScript】JavaScript中的时间函数

JavaScript中的时间函数 关于JavaScript里面时间的函数&#xff1a; 方法描述Date()返回当日的日期和时间。getDate()从Date对象返回一个月中的某一天&#xff08;1 ~ 31&#xff09;。getDay()从Date对象返回一周中的某一天&#xff08;0 ~ 6&#xff09;。getMonth()从Date…

LeetCode 热题HOT100-两数之和(C语言)

LeetCode 热题HOT100-两数之和&#xff08;C语言&#xff09; 作为一名程序语言的学习者&#xff0c;刷力扣我想是必要经历的一条路&#xff0c;所以我也在这里分享刷题后所得知识&#xff0c;也可以帮助更多人理解题意。 给定一个整数数组 nums 和一个整数目标值 target&#…

Zynq PS之UART调试

在创建应用工程时&#xff0c;选择Hello World模板即可&#xff0c;以XCZU21DR开发。 硬件原理图如下&#xff1a; Vivado中添加&配置IP 添加Zynq UltraScale MPSoc IP。 UART设置 DDR配置 硬件设计中选择的DDR4型号是MT40A2G8VA-062E IT&#xff0c;DDR配置如下图&…