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

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.rhkb.cn/news/141973.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

深入理解Java单例模式和优化多线程任务处理

目录 饿汉模式懒汉模式单线程版多线程版双重检查锁定 阻塞队列 单例模式能保证某个类在程序中只存在唯一一份实例, 而不会创建出多个实例&#xff0c;并提供一个全局访问点。 饿汉模式 类加载的同时&#xff0c;创建实例。 class Singleton {private static final Singlet…

基于 MATLAB 的电力系统动态分析研究【IEEE9、IEEE68系节点】

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

通俗易懂了解大语言模型LLM发展历程

1.大语言模型研究路程 NLP的发展阶段大致可以分为以下几个阶段&#xff1a; 词向量词嵌入embedding句向量和全文向量理解上下文超大模型与模型统一 1.1词向量 将自然语言的词使用向量表示&#xff0c;一般构造词语字典&#xff0c;然后使用one-hot表示。   例如2个单词&…

隐语 Meetup 北京站|精彩时刻大盘点!新品发布、行业案例、专家解读......欢迎围观

“隐语”是开源的可信隐私计算框架&#xff0c;内置 MPC、TEE、同态等多种密态计算虚拟设备供灵活选择&#xff0c;提供丰富的联邦学习算法和差分隐私机制 开源项目 github.com/secretflow gitee.com/secretflow 9月23日&#xff0c;隐语开源社区 Meetup 北京专场顺利举行&am…

人工智能的前世今生与未来

人工智能的前世今生与未来 一、 什么是人工智能二、人工智能的前世三、人工智能的今生四、人工智能的未来 一、 什么是人工智能 人工智能&#xff08;Artificial Intelligence&#xff0c;简称AI&#xff09;是指一种模拟人类智能行为的科学与技术。 人工智能通过计算机系统进…

【慕伏白教程】 Linux 深度学习服务器配置指北

文章目录 镜像烧录系统安装系统配置常用包安装 镜像烧录 下载 Ubuntu 镜像 Ubuntu 桌面版 下载烧录工具 balenaEtcher 准备至少 8G 的 空白U盘 开始烧录 系统安装 开机进入BIOS&#xff0c;修改U盘为第一启动 选择 Try or Install Ubuntu 往下拉&#xff0c;选择 中文&a…

SpringBoot2.x整合Jedis客户端详细过程

&#x1f9d1;‍&#x1f4bb;作者名称&#xff1a;DaenCode &#x1f3a4;作者简介&#xff1a;啥技术都喜欢捣鼓捣鼓&#xff0c;喜欢分享技术、经验、生活。 &#x1f60e;人生感悟&#xff1a;尝尽人生百味&#xff0c;方知世间冷暖。 &#x1f4d6;所属专栏&#xff1a;Sp…

[动物文学]走红年轻人化身“精神动物”,这届年轻人不想做人了

数据洞察流行趋势&#xff0c;敏锐把握流量风口。本期千瓜与您分享近期小红书八大热点内容&#xff0c;带您看热点、追热门、借热势&#xff0c;为您提供小红书营销布局风向标。 「动物文学」走红 年轻人化身“精神动物” 其实&#xff0c;这届年轻人“不想做人”很久了………

nvm nodejs的版本管理工具

nvm 全英文名叫 node.js version management&#xff0c;是一个 nodejs 的版本管理工具&#xff0c;为了解决 nodejs 各种版本存在不兼容现象可以通过他安装和切换不同版本的 nodejs。 一、完全删除之前的 node 和 npm 1. 打开 cmd 命令窗口&#xff0c;输入 npm cache clean…

二维码怎么分解成链接?线上快速解码教学

怎么分解二维码呢&#xff1f;有些时候我们需要将二维码图片分解成链接使用&#xff0c;所以想要使用解码功能一般都需要通过二维码生成器工具来完成。那么如何在线将二维码分解成链接呢&#xff0c;可能有些小伙伴还不知道怎么操作&#xff0c;下面就给大家分享一下免费二维码…

智能回答机器人的“智能”体现在哪里?

人工智能的广泛应用已经成为当今社会科技发展的趋势之一。通过人工智能技术&#xff0c;我们可以在不同领域中实现自动化、智能化和高效化&#xff0c;从而大大提升生产和生活效率。智能回答机器人的出现和使用便能很好的证明这一点。今天我们就来探讨一下智能会打机器人的“智…

分类预测 | Matlab实现GA-RF遗传算法优化随机森林多输入分类预测

分类预测 | Matlab实现GA-RF遗传算法优化随机森林多输入分类预测 目录 分类预测 | Matlab实现GA-RF遗传算法优化随机森林多输入分类预测效果一览基本介绍程序设计参考资料 效果一览 基本介绍 Matlab实现GA-RF遗传算法优化随机森林多输入分类预测&#xff08;完整源码和数据&…

在线安装qt5.15之后任意版本

下载qt现在安装包&#xff1a; window安装包链接 进入cmd&#xff0c;用命令行打开安装包&#xff0c;并指定组件下载地址&#xff08;这个是关键&#xff0c;之前用的是腾讯镜像&#xff0c;出现了版本灰色无法选中问题&#xff09; .\qt-unified-windows-x64-4.6.1-online…

解决yarn下载的具体操作步骤

如何使用yarn下载依赖 概述 在软件开发中&#xff0c;我们通常需要使用到各种不同的库和框架。为了方便管理这些依赖项&#xff0c;我们可以使用包管理工具来下载和安装这些库。yarn就是一款流行的包管理工具&#xff0c;它可以帮助我们高效地管理和下载依赖。 安装yarn 在…

json对象中嵌套一个json字符串,python如何生成带有转义字符的json的字符串?

前言 不想用java去弄&#xff0c;一顿操作json.dumps也没用&#xff0c;后面才知道需要这么操作 目的生成&#xff1a; data {"json": "{\"key1\": \"value1\", \"key2\": \"value2\"}" }但是直接用 import …

idea Springboot闲置物品交易平台VS开发mysql数据库web结构java编程计算机网页源码maven项目

一、源码特点 springboot 闲置物品交易平台是一套完善的完整二手交易信息系统&#xff0c;结合springboot框架和bootstrap完成本系统&#xff0c;对理解JSP java编程开发语言有帮助系统采用springboot框架&#xff08;MVC模式开发&#xff09;&#xff0c;系统具有完整的源代…

【.net core】使用nssm发布WEB项目

nssm下载地址&#xff1a;NSSM - the Non-Sucking Service Manager 配置方式 修改服务在nssm工具下输入命令:nssm edit jntyjr 其中 jntyjr为添加服务时设置的Service name nssm可以设置任何以参数启动的应用程序以服务形式启动,通过设置参数内容启动服务 以上配置等同于执行…

Python爬虫之入门保姆级教程

目录 一、分析要爬取的网站 二、导入相关库 三、相关的参数 四、向网站发出请求&#xff08;使用代理IP&#xff09; 五、匹配 六、获取图片&#xff0c;保存到文件夹中&#xff08;os库&#xff09; 七、完整代码 总结 相信许多人都曾为如何入门Python爬虫而烦恼。今天…

【工作记录】springboot集成aop实现日志@20230918

springboot集成aop实现日志 1. 添加依赖 <!-- aop 依赖 --> <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-aop</artifactId> </dependency>2. 定义注解 Target(ElementType.METHOD)…

Xcode14.3.1打包报错Command PhaseScriptExecution failed with a nonzero exit code

真机运行编译正常,一打包就报错 rsync error: some files could not be transferred (code 23) at /AppleInternal/Library/BuildRoots/d9889869-120b-11ee-b796-7a03568b17ac/Library/Caches/com.apple.xbs/Sources/rsync/rsync/main.c(996) [sender2.6.9] Command PhaseScrip…