算法竞赛备赛之动态规划训练提升,DP基础掌握

news2024/11/26 23:20:38

1.背包问题

1.1.01背包问题

01背包问题是在M件物品中选择若干件放在空间为W的背包中,每件物品的体积为W1,W2至Wn,价值为P1,P2至Pn,01背包的约束条件是给定几种物品,每种物品有且只有一个,并且有权值和体积两个属性。

01背包问题常常采用动态规划的方法去求解,状态转移方程为:F(W,i)=max{F(W,i-1),F(W-Wi,i)},表示前i种物品装进容量为W的背包里面获取的最大价值。

2.01背包问题

有N件物品和一个容器是V的背包。每件物品只能使用一次。

第i件物品的体积vi,价值wi。

求解将哪些物品加入背包,使得总价值最大。

#include<iostream>
#include<algorithm>
#include<cstring>
​
using namespace std;
​
const int N = 1010;
​
int n, m;
int v[N], w[N];
int f[N][N];
​
int main()
{
    scanf("%d%d", &n, &m);
    
    for(int i = 1;i <= n; i++)
        scanf("%d%d", &v[i], &w[i]);
    
    for(int i = 1;i <= n; i++)
        for(int j = 1;j <= m; j--)
            f[i][j] = max(f[i][j], f[i][j - v[i]] + w[i]);
    
    cout << f[n][m] << endl;
        
    return 0;
}

一维数组形式:

#include<iostream>
#include<algorithm>
#include<cstring>
​
using namespace std;
​
const int N = 1010;
​
int n, m;
int v[N], w[N];
int f[N];
​
int main()
{
    scanf("%d%d", &n, &m);
    
    for(int i = 1;i <= n; i++)
        scanf("%d%d", &v[i], &w[i]);
    
    for(int i = 1;i <= n; i++)
        for(int j = m;j >= v[i]; j--)
            f[j] = max(f[j], f[j - v[i]] + w[i]);
    
    cout << f[m] << endl;
        
    return 0;
}

1.2.完全背包问题

完全背包问题是指有N件物品和一个容量为V的背包,第i件物品的重量为weight[i],价值为value[i],每件物品有无限个,求怎样可以使背包物品价值总量最大。

完全背包问题与01背包问题大致相同,唯一不同的地方体现在遍历顺序方面,倒序遍历可避免一件物品重复选取。

3.完全背包问题

#include<iostream>
#include<algorithm>
​
using namespace std;
​
const int N = 1010;
​
int n, m;
int v[N], w[N];
int f[N][N];
​
int main()
{
    scanf("%d%d", &n, &m);
    
    for(int i = 1;i <= n; i++)
        scanf("%d%d", &v[i], &w[i]);
    
    for(int i = 1;i <= n; i++)
        for(int j = 1;j <= m; j++)
            for(int k = 0;k * v[i] <= j; k++)
                f[i][j] = max(f[i][j], f[i - 1][j - v[i] * k] + w[i] * k);
    
    cout << f[n][m] << endl;
    
    return 0;
}

但是上面的代码很容易就超时,时间复杂度比较大。

#include<iostream>
#include<algorithm>
​
using namespace std;
​
const int N = 1010;
​
int n, m;
int v[N], w[N];
int f[N][N];
​
int main()
{
    scanf("%d%d", &n, &m);
    
    for(int i = 1;i <= n; i++)
        scanf("%d%d", &v[i], &w[i]);
    
    for(int i = 1;i <= n; i++)
        for(int j = 1;j <= m; j++)
        {
            f[i][j] = f[i - 1][j];
            if(j >= v[i]) f[i][j] = max(f[i][j], f[i][j - v[i]] + w[i]);
        }
           
    cout << f[n][m] << endl;
    
    return 0;
}

改成一维数组形式:

#include<iostream>
#include<algorithm>
​
using namespace std;
​
const int N = 1010;
​
int n, m;
int v[N], w[N];
int f[N];
​
int main()
{
    scanf("%d%d", &n, &m);
    
    for(int i = 1;i <= n; i++)
        scanf("%d%d", &v[i], &w[i]);
    
    for(int i = 1;i <= n; i++)
        for(int j = v[i];j <= m; j++)
            f[j] = max(f[j], f[j - v[i]] + w[i]);
           
    cout << f[m] << endl;
    
    return 0;
}

1.3.多重背包问题

多重背包问题是在M种物品中选择若干件放在容量为W的背包中,每种物品有无限多个,01背包的约束条件是给定几种物品,每种物品有且只有一个,并且有权值和体积两个属性。

4.多重背包问题I

有 N 种物品和一个容量是 V 的背包。

第 i 种物品最多有 si 件,每件体积是 vi,价值是 wi。

求解将哪些物品装入背包,可使物品体积总和不超过背包容量,且价值总和最大。 输出最大价值。

多重背包的暴力解法:

#include<iostream>
#include<algorithm>
​
using namespace std;
​
const int N = 110;
​
int n, m;
int v[N], w[N], s[N];
int f[N][N];
​
int main()
{
    scanf("%d%d", &n, &m);
    
    for(int i = 1;i <= n; i++)
        scanf("%d%d%d", &v[i], &w[i], &s[i]);
    
    for(int i = 1;i <= n; i++)
        for(int j = 1;j <= m; j++)
            for(int k = 0;k <= s[i] && k * v[i] <= j; k++)
                f[i][j] = max(f[i][j], f[i - 1][j - v[i] * k] + w[i] * k);
    
    printf("%d\n", f[n][m]);
    
    return 0;
}

5.多重背包问题II

有N种物品和一个容器是V的背包

第i种物品最多有s件,每件体积是vi,价值是wi。

求解将哪些物品装入背包,可以使得物品总体积和不超过背包的容量,且价值总和最大。

数据范围:增加到2000

#include<iostream>
#include<algorithm>
​
using namespace std;
​
const int N = 25000;
​
int n, m;
int v[N], w[N];
int f[N];
​
int main()
{
    scanf("%d%d", &n, &m);
    
    int cnt = 0;
    
    for(int i = 1;i <= n; i++)
    {
        int a, b, s;
        scanf("%d%d%d", &a, &b, &s);
        
        int k = 1;
        while(k <= s)
        {
            cnt++;
            v[cnt] = a * k;
            w[cnt] = b * k;
            s -= k;
            k *= 2;
        }
        
        if(s > 0)
        {
            cnt++;
            v[cnt] = a * s;
            w[cnt] = b * s;
        }
    }
    
    n = cnt;
    
    for(int i = 1;i <= n; i++)
        for(int j = m;j >= v[i]; j--)
            f[j] = max(f[j], f[j - v[i]] + w[i]);
    
    cout << f[m] << endl;
    
    return 0;
}

9.分组背包问题

有 NN 组物品和一个容量是 VV 的背包。

每组物品有若干个,同一组内的物品最多只能选一个。 每件物品的体积是 vij,价值是 wij,其中 i 是组号,j 是组内编号。

求解将哪些物品装入背包,可使物品总体积不超过背包容量,且总价值最大。

输出最大价值。

#include<iostream>
#include<algorithm>
​
using namespace std;
​
const int N = 110;
​
int n, m;
int v[N][N], w[N][N], s[N];
int f[N];
​
int main()
{
    scanf("%d%d", &n, &m);
    
    for(int i = 1;i <= n; i++)
    {
        scanf("%d", &s[i]);
        for(int j = 0;j < s[i]; j++)
            scanf("%d%d", &v[i][j], &w[i][j]);
    }
    
    for(int i = 1;i <= n; i++)
        for(int j = m;j >= 0; j--)
            for(int k = 0;k < s[i]; k++)
                if(v[i][k] <= j)
                    f[j] = max(f[j], f[j - v[i][k]] + w[i][k]);
    
    cout << f[m] << endl;
    
    return 0;
}

2.线性DP

898.数字三角形

给定一个数字三角形,从顶部出发,在每一个结点可以选择移动至其左下方或者右下方的结点,一直走到底层,要求找出一条路径,是路径上的数字之和最大。

#include<iostream>
#include<algorithm>
​
using namespace std;
​
const int N = 510, INF = 1e9;
​
int n;
int a[N][N];
int f[N][N];
​
int main()
{
    scanf("%d", &n);
    for(int i = 1;i <= n; i++)
        for(int j = 1;j <= i; j++)
            scanf("%d", a[N][N]);
    
    for(int i = 1;i <= n; i++)
        for(int j = 1;j <= i; j++)
            f[i][j] = -INF;
    
    f[i][j] = a[1][1];
    
    for(int i = 2;i <= n; i++)
        for(int j = 1;j <= i; j++)
            f[i][j] = max(f[i - 1][j - 1] + a[i][j], f[i - 1][j] + a[i][j]);
    
    int res = -INF;
    for(int i = 1;i <= n; i++)
        res = max(res, f[n][i]);
    
    printf("%d\n", res);
    return 0;
}

895.最长上升序列I

给定一个长度为N,求数值严格单调递增的子序列的长度最长是多少。

状态表示f[i] 集合:所有以第i个数结尾的上升子序列。属性:Max所有的上升子序列

#include<iostream>
#include<algorithm>
​
using namespace std;
​
const int N = 1010;
int n;
int a[N], f[N];
​
int main()
{
    scanf("%d", &n);
    for(int i = 1;i <= n; i++)
        scanf("%d", &a[i]);
    
    for(int i = 1;i <= n; i++)
    {
        f[i] = 1;//只有a[i]一个数
        f(int j = 1;j < i; j++)
            if(a[j] < a[i])
                f[i] = max(f[i], f[j] + 1);
    }
    
    int res = 0;
    for(int i = 1;i <= n; i++)
        res = max(res, f[i]);
    
    printf("%d\n", res);
    return 0;
}

将要输出的序列打印出来:

#include<iostream>
#include<algorithm>
​
using namespace std;
​
const int N = 1010;
​
int n;
int a[N], f[N], g[N];
​
int main()
{
    scanf("%d", &n);
    for(int i = 1;i <= n; i++)
        scanf("%d", &a[i]);
    
    for(int i = 1;i <= n; i++)
    {
        f[i] = 1;
        g[i] = 0;
        for(int j = 1;j < i; j++)
            if(a[j] < a[j])
            {
                f[i] = f[j] + 1;
                g[i] = j;
            }
    }
    
    int k = 1;
    for(int i = 1;i <= n; i++)
        if(f[k] < f[i])
            k = 1;
    
    printf("%d\n", f[k]);
    
    for(int i = 0, len = f[k];i < len; i++)
    {
        printf("%d ", a[k]);
        k = g[k];
    }
    return 0;
}

896.最长上升子序列II

数据范围扩展到100000

897.最长公共子序列

第一个序列的前i个字母,和第二个序列前j个字母构成的子序列比较

#include<iostream>
#include<algorithm>
​
using namespace std;
​
const int N = 1010;
​
int n, m;
int a[N], b[N];
int f[N][N];
​
int main()
{
    scanf("%d%d", &n, &m);
    scanf("%s%s", a+1, b+1);
    
    for(int i = 1;i <= n; i++)
        for(int j = 1;j <= m; j++)
        {
            f[i][j] = max(f[i - 1][j], f[i][j - 1]);
            if(a[i] == b[j]) f[i][j] = max(f[i][j], f[i - 1][j - 1] + 1);
        }
    
    printf("%d\n", f[n][m]);
    
    return 0;
}

899.编辑距离

给定个长度不超过10的字符串以及次询问,每次询问给出一个字符串和一个操作次数上限。

对于每次询问,请你求出给定的个字符串中有多少个字符串可以在上限操作次数内经过操作变成询问给出的字符串。

每个对字符串进行的单个字符的插入、删除或替换算作一次操作。

#include<iostream>
#include<algorithm>
​
using namespace std;
​
int main()
{
    
    return 0;
}

3.区间DP

282.石子合并

设有 NN 堆石子排成一排,其编号为 1,2,3,…,N1,2,3,…,N。

每堆石子有一定的质量,可以用一个整数来描述,现在要将这 NN 堆石子合并成为一堆。

每次只能合并相邻的两堆,合并的代价为这两堆石子的质量之和,合并后与这两堆石子相邻的石子将和新堆相邻,合并时由于选择的顺序不同,合并的总代价也不相同。

例如有 4 堆石子分别为 1 3 5 2, 我们可以先合并 1、2堆,代价为 4,得到 4 5 2, 又合并 1、2 堆,代价为 9,得到 9 2 ,再合并得到 11,总代价为 4+9+11=24;

如果第二步是先合并 2、3 堆,则代价为 7,得到 4 7,最后一次合并代价为 11,总代价为 4+7+11=22。

问题是:找出一种合理的方法,使总的代价最小,输出最小代价。

#include<iostream>
#include<algorithm>
​
using namespace std;
​
const int N = 310;
​
int n;
int s[N];
int f[N][N];
​
int main()
{
    scanf("%d", &n);
    for(int i = 1;i <= n; i++)
        scanf("%d", &s[i]);
    
    for(int i = 1;i <= n; i++)
        s[i] += s[i - 1];
    
    for(int len = 2;len <= n; len++)
        for(int i = 1;i + len - 1 <= n; i++)
        {
            int l = i, r = len + i - 1;
            f[l][r] = 1e8;
            for(int k = l;k < r; k++)
                f[l][r] = min(f[l][r], f[l][k] + f[k + 1][r] + s[r] - s[l - 1]);
        }
    
    printf("%d\n", f[1][n]);
    return 0;
}

4.计数类DP

敬请期待

5.数位统计DP

338.计数问题

给定两个整数 a和 b,求 a 和 b 之间的所有数字中 0∼9的出现次数。

分别求出1的每一位上出现的次数

#include <bits/stdc++.h>
​
using namespace std;
int num[10];
​
int power10(int k)
{
    int res = 1;
    while(k){
        res *= 10;
        k --;
    }
    return res;
}
​
int getnum(int num[],int x,int y)
{
    int res = 0;
    for(int i = x;i <= y;i ++){
        res = res * 10 + num[i];
    }
    return res;
}
​
int solve(int n,int x)//求1~n中x的出现次数
{
    if(n == 0) return 0;
    int tmp = n,p = 0,res = 0,t;
    while(tmp){//获取数字n的每一位
        p ++;
        tmp /= 10;
    }
    tmp = n,t = p;
    while(tmp){//获取数字n的每一位
        num[t --] = tmp % 10;
        tmp /= 10;
    }
    for(int i = 1;i <= p;i ++){//求x在第i位中的出现次数
        if(x == 0 && i != 1){//0不可能在第一位出现
            res = res + (getnum(num,1,i - 1) - 1) * power10(p - i);
            if(num[i] < 1) res = res + getnum(num,i + 1,p) + 1;
            else res += power10(p - i); 
        }
        else if(x != 0){
            res = res + getnum(num,1,i - 1) * power10(p - i);
            if(num[i] == x) res += getnum(num,i + 1,p) + 1;
            else if(num[i] > x) res += power10(p - i); 
​
        }
    }
    return res;
}
​
int main()
{
    int a,b;
    while(cin >> a >> b,a || b){
        if(a > b) swap(a,b);
        int ans1[10] = {0},ans2[10] = {0};
        for(int i = 0;i < 10;i ++){
            int t1 = solve(b,i),t2 = solve(max(a - 1,1),i);
            if(a == 1) t2 = 0;
            cout << t1 - t2 << ' ';
        }
        cout << '\n';
    }
    return 0;
}

6.状态压缩DP

291.蒙德里安的梦想

求把 N×M 的棋盘分割成若干个 1×2 的长方形,有多少种方案。

例如当 N=2,M=4 时,共有 5 种方案。当 N=2,M=3 时,共有 3 种方案。

如下图所示:

2411_1.jpg

#include<iostream>
#include<algorithm>
#include<cstring>
​
using namespace std;
​
const int N = 12, M = 1 << N;
​
int n, m;
long long f[N][M];
bool st[M];
​
int main()
{
    while(cin >> n >> m, n || m)
    {
        memset(f, 0, sizeof(f));
        
        for(int i = 0;i < 1 << n; i++)
        {
            st[i] = true;
            int cnt = 0;
            for(int j = 0;j < n; j++)
                if(i >> j & 1)
                {
                    if(cnt & 1) st[i] = false;
                    cnt = 0;
                }
                else cnt++;
            
            if(cnt & 1) st[i] = false;
        }
        
        f[0][0] = 1;
        for(int i = 1;i <= m; i++)
            for(int j = 0;j < 1 << n; j++)
                for(int k = 0;k < 1 << n; k++)
                    if((j & k) == 0 && st[j | k])
                        f[i][j] += f[i - 1][k];
        
        cout << f[m][0] << endl;
    }
    
    return 0;
}

91. 最短Hamilton路径

给定一张 n 个点的带权无向图,点从 0∼n−1 标号,求起点 0 到终点 n−1 的最短 Hamilton 路径。

Hamilton 路径的定义是从 0 到 n−1 不重不漏地经过每个点恰好一次。

#include<iostream>
#include<algorithm>
#icnlude<cstring>
​
using namespace std;
​
const int N = 20, M = 1 << N;
​
int n;
int w[N][N];
int f[M][N];
​
int main()
{
    cin >> n;
    for(int i = 0;i < n; i++)
        for(int j = 0;j < n; j++)
            cin >> w[i][j];
    
    memset(f, 0x3f, sizeof(f));
    f[1][0] = 0;
    for(int i = 0;i < 1 << n; i++)
        for(int j = 0;j < n; j++)
            if(i >> j & 1)
                for(int k = 0;k < n; k++)
                    f[i][j] = min(f[i][j], f[i - (1 << j)][k] + w[k][j]);
    
    cout << f[(1 << n) - 1][n - 1] << endl; 
    return 0;
}

7.树形DP

285.没有上司的舞会

Ural 大学有 N 名职员,编号为 1∼N。

他们的关系就像一棵以校长为根的树,父节点就是子节点的直接上司。

每个职员有一个快乐指数,用整数 Hi 给出,其中 1≤i≤N。

现在要召开一场周年庆宴会,不过,没有职员愿意和直接上司一起参会。

在满足这个条件的前提下,主办方希望邀请一部分职员参会,使得所有参会职员的快乐指数总和最大,求这个最大值。

状态表示:集合所有从以u为根的子树中选择,并且不选u这个点的方案

所有从以u为根的子树中选,并且选择u这个点的方案

#include<iostream>
#include<cstring>
#include<algorithm>
​
using namespace std;
​
const int N = 6010;
​
int n;
int happy[N];
int h[N], e[N], ne[N], idx;
int f[N][2];
bool has_father[N];
​
void add(int a, int b)
{
    e[idx] = b;
    ne[idx] = h[a];
    h[a] = idx++;
}
​
void dfs(int u)
{
    f[u][1] = happy[u];
    
    for(int i = h[u];i != -1; i = ne[i])
    {
        int j = e[i];
        dfs(j);
        
        f[u][0] += max(f[j][0], f[j][1]);
        f[u][1] += f[j][0];
    }
}
​
int main()
{
    scanf("%d", &n);
    for(int i = 1;i <= n; i++) scanf("%d", &happy[i]);
    
    memset(h, -1, sizeof(h));
    for(int i = 0;i < n - 1; i++)
    {
        int a, b;
        scanf("%d%d", &a, &b);
        has_father[a] = true;
        add(b, a);
    }
    
    int root = 1;
    while(has_father[root]) root++;
    
    dfs(root);
    
    printf("%d\n", max(f[root][0], f[root][1]));
    
    return 0;
}

8.记忆化搜索

记忆化搜索是一种优化搜索算法的方法,通过将搜索过程可视化,可以快速找到目标节点。在记忆化搜索中,首先将搜索过程记录在一个记忆表中,然后在搜索时检查记忆表以寻找目标节点。这种方法可以大大减少搜索时间,特别是在具有大量节点的图中。

记忆化搜索通常用于解决诸如图匹配、最短路径和最小生成树等问题。在实际应用中,记忆化搜索可以通过动态规划、散列和查表等技术实现。

901.滑雪

给定一个R行C列的矩阵,表示一个矩形网格滑雪场。

矩阵中第i行第1列的点表示滑雪场的第i行第j列区域的高度。

一个人从滑雪场中的某个区域内出发,每次可以向上下左右任意一个方向滑动一个单位距离。

当然,一个人能够滑动到某相邻区域的前提是该区域的高度低于自己目前所在区域的高度。

#include<iostream>
#include<algorithm>
#include<cstring>
​
using namespace std;
​
const int N = 310;
​
int n, m;
int h[N][N];
int f[N][N];
​
int dx[4] = {-1, 0, 1, 0}, dy[4] = {0, 1, 0, -1};
​
int dp(int x, int y)
{
    int &v = f[x][y];
    if(v != -1) return v;
    
    v = 1;
    for(int i = 0;i < 4; i++)
    {
        int a = x + dx[i], b = y + dy[i];
        if(a >= 1 && a <= n && b >= -1 && b <= m && h[a][b] < h[x][y])
            v = max(v, dp(a, b) + 1);
    }
    return v;
}
​
int main()
{
    scanf("%d%d", &n, &m);
    
    for(int i = 1;i <= n; i++)
        for(int j = 1;j <= m; j++)
            scanf("%d", &h[i][j]);
    
    memset(f, -1, sizeof(h));
    
    int res = 0;
    for(int i = 1;i <= n; i++)
        for(int j = 1;j <= m; j++)
            res = max(res, dp(i, j));
    
    printf("%d\n", res);
    return 0;
}

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

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

相关文章

(4) OpenCV图像处理kNN近邻算法-识别数字0和1

我们的目标是构建一个可以读取手写数字的应用程序。为此,我们需要创建一个手写数字的图片文件 “ digits.png ”,图像的像素为:( 320*40 ), 其中包含 32个手写数字(每个数字16个),每个数字都是20x20的图像,如下图。 因此,我们的第 1 步是将图像分割成 32 个不…

华为OD机试 - 第k个排列 - 全排列递归(Java 2023 B卷 100分)

目录 专栏导读一、题目描述二、输入描述三、输出描述四、解题思路五、Java算法源码六、效果展示1、输入2、输出3、说明 华为OD机试 2023B卷题库疯狂收录中&#xff0c;刷题点这里 专栏导读 本专栏收录于《华为OD机试&#xff08;JAVA&#xff09;真题&#xff08;A卷B卷&#…

C语言刷题篇(备赛中......)--------( 篇章1 )

前言: 博主报名了一个小比赛&#xff0c;用来写一些基础的C语言题目&#xff0c;正好借此巩固一下基础 希望这些题对你们也有帮助 猫猫跟你说:该学习了 目录 前言: 题目&#xff08; 1 &#xff09; 解题思路 题目&#xff08; 2 &#xff09; 解题思路 题目&#xff…

Linux虚拟机磁盘空间不足怎么办

我是一个目录 1. 在虚拟机客户端扩充磁盘空间2. 检查磁盘空间3. 扩展空间而无需重启虚拟机4. 创建新磁盘分区5. 创建物理卷6. 扩展逻辑卷 对大多数系统管理员来说&#xff0c;扩充 Linux 服务器的磁盘空间是日常的工作之一&#xff0c;下面会通过使用 Linux 命令&#xff0c;在…

Text-to-SQL小白入门(七)PanGu-Coder2论文——RRTF

论文概述 学习这个RRTF之前&#xff0c;可以先学习一下RLHF。 顺带一提&#xff1a;eosphoros-ai组织「DB-GPT开发者」最新有个新项目Awesome-Text2SQL&#xff1a;GitHub - eosphoros-ai/Awesome-Text2SQL: Curated tutorials and resources for Large Language Models, Text2…

ps 去除图标背景色

百度安全验证 https://baijiahao.baidu.com/s?id1766678909759797922&wfrspider&forpc 使用魔术橡皮擦工具&#xff0c;超级简单 最后&#xff0c;保存为PNG格式&#xff0c;因为PNG格式支持透明背景。

大二毕设.3-网盘系统-文件模块讲解

目录 模块功能介绍 抽象文件存储引擎顶级接口 高性能单文件上传-sendfile零拷贝 为什么要分片上传 文件存储引擎模块讲解 文件模块具体实现讲解 项目演示博客 模块功能介绍 文件列表查询 聚簇索引和非聚簇索引回表查询最左前缀原则覆盖索引创建文件夹文件重命名文件删除 …

jvs-rules(规则引擎)和jvs智能bi(自助式数据分析)9.22更新内容

规则引擎更新功能 新增: 1.新增节点匹配筛选 用于做多个条件的数据筛选&#xff0c;以便将符合条件的数据传递给下一个节点进行处理&#xff0c;通常用于实现复杂的查询逻辑。 2.复合变量节点新增判断条件选项说明 用户可以根据自己的需求&#xff0c;为复合变量节点添加不…

全球化、国际化、本地化和翻译:GILT 的方法

为促进公司走向全球市场&#xff0c;您需要与客户沟通&#xff0c;并成功传达您的信息。您可能会认为&#xff0c;您需要的只是一支强大的翻译团队。但是&#xff0c;翻译并不像看起来那么简单。 将公司信息翻译成另一种语言&#xff0c;需要了解一些细微差别和文化背景。要想在…

合合信息、上海大学、华南理工大学发布业内首个古彝文编码“大字典” ,为古文字打造“身份证”

“乌蒙山连着山外山&#xff0c;月光洒向了响水滩。”近期在各大短视频平台爆火的《奢香夫人》你听过吗&#xff1f;奢香夫人是一位彝族“巾帼英雄”&#xff0c;这首同名歌曲早在2009年便已发布&#xff0c;如今突然“翻红”&#xff0c;不仅体现了大众对于少数民族文化高涨的…

竞赛 基于生成对抗网络的照片上色动态算法设计与实现 - 深度学习 opencv python

文章目录 1 前言1 课题背景2 GAN(生成对抗网络)2.1 简介2.2 基本原理 3 DeOldify 框架4 First Order Motion Model5 最后 1 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x1f6a9; 基于生成对抗网络的照片上色动态算法设计与实现 该项目较为新颖&am…

计算糖果(牛客)

一、题目 计算糖果_牛客题霸_牛客网 二、代码 #include <iostream> using namespace std;int main() {int x, y, m, n;cin >> x >> y >> m >> n;//A-Bx B-Cy ABm BCnif ((x > 30 || x < -30) && (y > 30 || y < -30) &am…

【Vue】模板语法,插值、指令、过滤器、计算属性及监听属性(内含面试题及毕设等实用案例)上篇

一、引言 1、什么是模板语法&#xff1f; Vue 的模板语法是一种用于在 HTML 中声明式地渲染 Vue 组件的语法。它基于 HTML&#xff0c;并通过特定的模板语法扩展了 HTML。Vue 使用了一种称为 “Mustache” 语法的模板插值来绑定数据到 HTML 元素上。 在 Vue 的模板语法中&…

像专业人士一样部署:掌握代码部署的最佳实践

作为开发人员&#xff0c;您知道部署代码可能是一个耗时且复杂的过程。简化生产部署对于确保您的代码尽快有效地到达用户手中至关重要。但如何实现这一目标呢&#xff1f;在本文中&#xff0c;我们将讨论简化生产部署的一些基本提示和技巧。 从自动化构建过程到优化发布策略&am…

Java高级应用——多线程

目录 多线程 相关名词解释 程序、进程与线程 并行与并发 单核与多核 Java多线程概述 Test测试框架测试多线程的注意事项 主线程和子线程的概念 Test测试类需要使用.join()方法来确保子线程执行完毕 线程调度&#xff08;目前仅了解&#xff09; 守护线程&#xff08;…

【Linux】Linux 常用命令

Linux 常用命令 1. 复制/粘贴2. 查看目录和文件: ls3. 查看当前目录: pwd4. 切换目录: cd5. Linux 目录结构6. 绝对路径 vs 相对路径7. tab 键补全8. ctrl c 重新输入9. 创建文件: touch10. 查看文件内容: cat11. 写内容 echo12. 创建目录: mkdir12. 删除文件: rm13. 拷贝文件…

易基因直播预告|细菌微生物基因表达调控表观研究易基因科技

大家好&#xff0c;这里是专注表观组学十余年&#xff0c;领跑多组学科研服务的易基因。 DNA甲基化是在半个多世纪前在细菌中发现的。DNA碱基可以作为一个表观遗传调节因子——也就是说&#xff0c;它可以赋予相同的基因序列不同的和可逆的调控状态。在真核生物中&#xff0c;…

可变形注意力转换器综述

这篇文章基于本文的发现 一、说明 关于注意力机制&#xff0c;关于transformer等存在大量的研究和尝试&#xff0c;这些研究有的被沙汰&#xff0c;有的被采用并发扬光大&#xff0c;本篇对可变卷积、可变局部注意力机制和全局注意力机制做详细解释。因为这些模型规模巨大&…

【前端面试题】2023年 国庆 前端面试真题之JS篇

人的一生&#xff0c;总是难免有浮沉。不会永远如旭日东升&#xff0c;也不会永远痛苦潦倒。反复地一浮一沉&#xff0c;对于一个人来说&#xff0c;正是磨练。因此&#xff0c;浮在上面的&#xff0c;不必骄傲&#xff1b;沉在底下的&#xff0c;更用不着悲观。必须以率直、谦…

获取keystore中的公钥模数及md5

app备案时需要使用apk中的签名公钥&#xff0c;以及md5&#xff0c;但官方提供的方法是使用jadxGUI去打开apk获取&#xff1a; 填写App特征信息_备案-阿里云帮助中心 实际生产中apk都没有可能就要走备案流程。 但其实公钥模数和md5不需要apk&#xff0c;只需要keystore就行了。…