【动态规划】任务调度dp 自用

news2024/9/21 0:33:37

kkksc03考前临时抱佛脚

原题

题目背景

kkksc03 的大学生活非常的颓废,平时根本不学习。但是,临近期末考试,他必须要开始抱佛脚,以求不挂科。

题目描述

这次期末考试,kkksc03 需要考 4 4 4 科。因此要开始刷习题集,每科都有一个习题集,分别有 s 1 , s 2 , s 3 , s 4 s_1,s_2,s_3,s_4 s1,s2,s3,s4 道题目,完成每道题目需要一些时间,可能不等( A 1 , A 2 , … , A s 1 A_1,A_2,\ldots,A_{s_1} A1,A2,,As1 B 1 , B 2 , … , B s 2 B_1,B_2,\ldots,B_{s_2} B1,B2,,Bs2 C 1 , C 2 , … , C s 3 C_1,C_2,\ldots,C_{s_3} C1,C2,,Cs3 D 1 , D 2 , … , D s 4 D_1,D_2,\ldots,D_{s_4} D1,D2,,Ds4)。

kkksc03 有一个能力,他的左右两个大脑可以同时计算 2 2 2 道不同的题目,但是仅限于同一科。因此,kkksc03 必须一科一科的复习。

由于 kkksc03 还急着去处理洛谷的 bug,因此他希望尽快把事情做完,所以他希望知道能够完成复习的最短时间。

输入格式

本题包含 5 5 5 行数据:第 1 1 1 行,为四个正整数 s 1 , s 2 , s 3 , s 4 s_1,s_2,s_3,s_4 s1,s2,s3,s4

2 2 2 行,为 A 1 , A 2 , … , A s 1 A_1,A_2,\ldots,A_{s_1} A1,A2,,As1 s 1 s_1 s1 个数,表示第一科习题集每道题目所消耗的时间。

3 3 3 行,为 B 1 , B 2 , … , B s 2 B_1,B_2,\ldots,B_{s_2} B1,B2,,Bs2 s 2 s_2 s2 个数。

4 4 4 行,为 C 1 , C 2 , … , C s 3 C_1,C_2,\ldots,C_{s_3} C1,C2,,Cs3 s 3 s_3 s3 个数。

5 5 5 行,为 D 1 , D 2 , … , D s 4 D_1,D_2,\ldots,D_{s_4} D1,D2,,Ds4 s 4 s_4 s4 个数,意思均同上。

输出格式

输出一行,为复习完毕最短时间。

样例 #1

样例输入 #1

1 2 1 3		
5
4 3
6
2 4 3

样例输出 #1

20

提示

1 ≤ s 1 , s 2 , s 3 , s 4 ≤ 20 1\leq s_1,s_2,s_3,s_4\leq 20 1s1,s2,s3,s420

1 ≤ A 1 , A 2 , … , A s 1 , B 1 , B 2 , … , B s 2 , C 1 , C 2 , … , C s 3 , D 1 , D 2 , … , D s 4 ≤ 60 1\leq A_1,A_2,\ldots,A_{s_1},B_1,B_2,\ldots,B_{s_2},C_1,C_2,\ldots,C_{s_3},D_1,D_2,\ldots,D_{s_4}\leq60 1A1,A2,,As1,B1,B2,,Bs2,C1,C2,,Cs3,D1,D2,,Ds460

解1

典型的01背包问题
几乎是01背包模板题,无脑刷过

不同点
要分四次记录答案


记牢每次一定要初始化背包数组

#include<bits/stdc++.h>
using namespace std;
int s[5],a[21],f[1210],ans=0;
int main()
{
    for(int i=1;i<=4;i++)
        cin>>s[i];//四个背包
    for(int k=1;k<=4;k++)//依次进行枚举
    {
        int sum=0;
        for(int j=1;j<=s[k];j++)
            
            {
                cin>>a[j];
                sum+=a[j];//记录背包大小
            }
        memset(f,0,sizeof(f));//清空背包
        f[0]=1;//初始化
        for(int i=1;i<=s[k];i++)
            for(int j=sum;j>=0;j--)
                if(f[j])//如果上一个大小可以取
                    f[j+a[i]]=1;//那么加上物品后的容量也可以取
        int tmp=sum,res;
        for(int i=0;i<=sum;i++)//枚举答案
            if(f[i]&&tmp>=abs(i-(sum-i)))
            {
                tmp=abs(i-(sum-i));
                res=max(i,sum-i);
            }
        ans+=res;//将答案记录下来
    }
    cout<<ans<<endl;
}

解2

P党的福利

这道题可以用dp的方法来做。其实和01背包差不多。

其实就是将每个科目的所有复习时间分成两部分,尽量使得两部分的总时间都接近一半。

背包结束后f[m/2]总是小于等于m-f[m/2],要加最大值。这就是这道题的唯一坑点吧……

没学过01背包请先看看 P2871 ,链接放这不谢。一定要学会哦~

下面上代码:

var
w:array[1..100000] of longint;
f:array[1..100000] of longint;
a,b,c,d,ans,i:longint;
function max(a,b:longint):longint;
begin
if a>b then exit(a)
else exit(b);
end;
procedure dp(n:longint);//dp函数,要用就拿来用
var
i,j,cnt:longint;
begin
fillchar(f,sizeof(f),0);
cnt:=0;
for i:=1 to n do inc(cnt,w[i]);
for i:=1 to n do
for j:=cnt div 2 downto w[i] do
f[j]:=max(f[j],f[j-w[i]]+w[i]);//状态转移方程
inc(ans,cnt-f[cnt div 2])//(坑点)
end;
begin
readln(a,b,c,d);
ans:=0;
for i:=1 to a do read(w[i]); readln; dp(a);
for i:=1 to b do read(w[i]); readln; dp(b);
for i:=1 to c do read(w[i]); readln; dp(c);
for i:=1 to d do read(w[i]); readln; dp(d);
writeln(ans);
end.

解3

贪心题:既然是算较短的时间,如果左脑所用时间少就加在左脑,如果右脑所用时间少就加在右脑

#include<bits/stdc++.h>
using namespace std;
int a[5],i,j,sum1,sum2,t,homework;
int main(){
    for(i=1;i<=4;i++)
        cin>>a[i];//输入
    for(i=1;i<=4;i++){
    sum1=sum2=0;//两边脑子时间清零
    for(j=1;j<=a[i];j++)
        {cin>>homework;
        if(sum1<=sum2) sum1+=homework;
        else sum2+=homework;}//哪边时间短就加在哪边
        t+=max(sum1,sum2);//取较长时间累加
    }cout<<t;//输出
    return 0;
}

满怀期待的提交后,结果有点震惊 结果
果然,贪心不是正解
后来思考了一下,便感觉是dp,对于一道题只有两个状态,一是加到左脑,二是加到右脑,所以是01背包
这里还可以用另一个思想,将一边的脑子加到最接近一半则另一边脑子时间就是正解

#include<bits/stdc++.h>
using namespace std;
int a[5],i,j,k,sum,t,homework[21],dp[2501];
int main(){
	for(i=1;i<=4;i++)
		cin>>a[i];
	for(i=1;i<=4;i++){
		sum=0;	
		for(j=1;j<=a[i];j++)
			{cin>>homework[j];//输入
			sum+=homework[j];}//总时间累加
		for(j=1;j<=a[i];j++)
			for(k=sum/2;k>=homework[j];k--)//只要是总和的一半
				dp[k]=max(dp[k],dp[k-homework[j]]+homework[j]);//01背包
		t+=sum-dp[sum/2];//累加为另一个脑子
		for(j=1;j<=sum/2;j++)
		dp[j]=0;//清零
	}
	cout<<t;//输出
	return 0;
}

[HNOI2001] 产品加工

题目描述

某加工厂有 A、B 两台机器,来加工的产品可以由其中任何一台机器完成,或者两台机器共同完成。由于受到机器性能和产品特性的限制,不同的机器加工同一产品所需的时间会不同,若同时由两台机器共同进行加工,所完成任务又会不同。

某一天,加工厂接到 n n n 个产品加工的任务,每个任务的工作量不尽一样。

你的任务就是:已知每个任务在 A 机器上加工所需的时间 t 1 t_1 t1,B 机器上加工所需的时间 t 2 t_2 t2 及由两台机器共同加工所需的时间 t 3 t_3 t3,请你合理安排任务的调度顺序,使完成所有 n n n 个任务的总时间最少。

输入格式

第一行为一个整数 n n n

接下来 n n n 行,每行三个非负整数 t 1 , t 2 , t 3 t_1,t_2,t_3 t1,t2,t3,分别表示第 i i i 个任务在 A 机器上加工、B 机器上加工、两台机器共同加工所需要的时间。如果所给的时间 t 1 t_1 t1 t 2 t_2 t2 0 0 0 表示任务不能在该台机器上加工,如果 t 3 t_3 t3 0 0 0 表示任务不能同时由两台机器加工。

输出格式

仅一行一个整数,表示完成所有 n n n 个任务的最少总时间。

样例 #1

样例输入 #1

5                            
2 1 0
0 5 0
2 4 1
0 0 3
2 1 1

样例输出 #1

9

提示

对于所有数据,有 1 ≤ n ≤ 6 × 1 0 3 1\le n\le 6\times 10^3 1n6×103 0 ≤ t 1 , t 2 , t 3 ≤ 5 0\le t_1,t_2,t_3\le 5 0t1,t2,t35

解1

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

Code

memset(dp, 0x3f, sizeof(dp));
dp[0] = 0;
for (int i = 1; i <= n; i++) {
	up += max(t1[i], t3[i]);
	for (int j = up; j >= 0; j--) {
		int p = 0x3f3f3f3f;
		if (j >= t1[i]) p = dp[j - t1[i]];
		int q = dp[j] + t2[i];
		int r = 0x3f3f3f3f;
		if (j >= t3[i]) r = dp[j - t3[i]] + t3[i];
		if (t1[i] == 0) p = 0x3f3f3f3f;
		if (t2[i] == 0) q = 0x3f3f3f3f;
		if (t3[i] == 0) r = 0x3f3f3f3f;
		dp[j] = MIN(p, q, r);
	}
}

解2

我们首先看到,这个题同时维护两个甚至是三个进程,实在是不好想。我也是第一次看到有把数组下标当作最优状态求答案的,DP题见的应该还是越多越好。

我们试着用f[i][j]来维护当前加工第i个物品,A机器用时为j时B机器的最短用时。①我们不用担心排序问题,②也不用担心同时做会耽误某个空档的时间。①因为我们把这个模型当作一个背包,只管加入工件,不管添加顺序(背包不也是这样么)。②同时做的后效性问题:因为这里做的时候不用排序,所以我们把所有加入背包的同时进行的进程提到最前面去。

我们看这样一组数据:
3
5 0 0
0 2 0
0 0 3
我们模拟这个过程,是这样的(分别编号为工件1,2,3)

因为我们用的是背包,所以等价于下面这样:(贪心的思想)

所以在没有顺序的时候,直接按背包做。我们的状态转移方程就是这样,不过状态只能单点转移而不是像背包那样只要比c[i]大都能转移:

f[][]=∞ f[0][0]=0
f[i][j]=min{f[i-1][j]+t2[i],f[i-1][j-t1[i]],f[i-1][j-t3[i]]+t3[i]}

因为这个题数据范围达到$ 5×6000^2=1.8\times 10^8$,超出1亿次,并且空间也会超128M,因此我们要优化枚举下界,并滚掉第一维。滚动比较好做,只要保存好转移t2时的状态,和背包相同。

枚举下界的调整:我们可以看出,因为状态是非严格单调递增的,所以我们如果发现对∀i∈[0,k],f[i]=∞,那么k以下的状态已经作废了,不会再被用到。此时我们的枚举下界down就可以调整到k了,并且每次做完检验是否可以继续更新。

同时要记得在输入的时候记录上界(up+=max{t1[i],t2[i],t3[i]}),并记得每次置为∞防止用到过时状态(尤其是做t2时可能会碰到两层前的状态)。

Code:(luogu开了O2才能过?)

#include<cstring>
#include<cstdio>
int f[30100];
int t[4][6666];
int max(int x,int y)//重载貌似比stl快一点
{
    return x>y?x:y;
}
int min(int x,int y)
{
    return x<y?x:y;
}
int main()
{
    memset(f,0x3f,sizeof(f));
    int n,up=0;
    scanf("%d",&n);
    for(int i=1;i<=n;i++)
    {
        for(int j=1;j<=3;j++)
            scanf("%d",&t[j][i]);
        up+=max(t[1][i],max(t[2][i],t[3][i]));
    }
    f[0]=0;
    int down=0,tmp;
    for(int i=1;i<=n;i++)
    {
        for(int j=up;j>=down;j--)
        {
            tmp=f[j];//初始化前存一下原来的值,但是只有t2能用(和其他题解不同)
            f[j]=0x3f3f3f3f;//相当于每次初始化
            if(j>=t[1][i]&&t[1][i]>0)
                f[j]=f[j]<f[j-t[1][i]]?f[j]:f[j-t[1][i]];
            if(j>=t[3][i]&&t[3][i]>0)
                f[j]=f[j]<f[j-t[3][i]]+t[3][i]?f[j]:f[j-t[3][i]]+t[3][i];
            if(t[2][i]>0)
                f[j]=f[j]<tmp+t[2][i]?f[j]:tmp+t[2][i];
        }
        while(f[down]>=0x3f3f3f3f)
            down++;
    }
    int ans=up;
    for(int i=down;i<=up;i++)
    {
        tmp=max(f[i],i);
        ans=ans<tmp?ans:tmp;
    }
    printf("%d\n",ans);
    return 0;
}

任务调度

题解
另一篇题解
有若干个任务需要在一台机器上运行。

它们之间没有依赖关系,因此可以被按照任意顺序执行。

该机器有两个 CPU 和一个 GPU。

对于每个任务,你可以为它分配不同的硬件资源:

  1. 在单个 CPU 上运行。
  2. 在两个 CPU 上同时运行。
  3. 在单个 CPU 和 GPU 上同时运行。
  4. 在两个 CPU 和 GPU 上同时运行。

一个任务开始执行以后,将会独占它所用到的所有硬件资源,不得中断,直到执行结束为止。

i i i 个任务用单个 CPU,两个 CPU,单个 CPU 加 GPU,两个 CPU 加 GPU 运行所消耗的时间分别为 a i , b i , c i a_i,b_i,c_i ai,bi,ci d i d_i di

现在需要你计算出至少需要花多少时间可以把所有给定的任务完成。

输入格式

输入的第一行只有一个正整数 n n n,是总共需要执行的任务个数。

接下来的 n n n 行每行有四个正整数 a i , b i , c i , d i a_i, b_i, c_i, d_i ai,bi,ci,di,以空格隔开。

输出格式

输出只有一个整数,即完成给定的所有任务所需的最少时间。

数据范围

1 ≤ n ≤ 40 1 \le n \le 40 1n40,
1 ≤ a i , b i , c i , d i ≤ 10 1 \le a_i,b_i,c_i,d_i \le 10 1ai,bi,ci,di10

输入样例:
3
4 4 2 2
7 4 7 4
3 3 3 3
输出样例:
7
样例解释

有很多种调度方案可以在 7 7 7 个时间单位里完成给定的三个任务,以下是其中的一种方案:

同时运行第一个任务(单 CPU 加上 GPU)和第三个任务(单 CPU),它们分别在时刻 2 2 2 和时刻 3 3 3 完成。

在时刻 3 3 3 开始双 CPU 运行任务 2 2 2,在时刻 7 7 7 完成。

#include <iostream>
#include <cstring>
#include <algorithm>
#include <cmath>
#include <vector>

using namespace std;

const int N = 50, M = 210, INF = 0x3f3f3f3f;

int n;
int c[N][3];
int f[2][M][M][M];

int main()
{
    cin >> n;

    int m = 0, m2 = 0;
    for (int i = 1; i <= n; i ++ )
    {
        int x, y, z, t;
        cin >> x >> y >> z >> t;
        c[i][0] = x, c[i][1] = z, c[i][2] = min(y, t);
        m += x;
        if (i % 2) m2 += x;
    }

    // 注意之前课上的写法有误,之前的写法是m = (m + 1) / 2,因为不一定能恰好分得这么平均
    m = max(m2, m - m2);  // 这里简单得按奇偶性分成两组即可

    memset(f, 0x3f, sizeof f);
    f[0][0][0][0] = 0;
    for (int u = 1; u <= n; u ++ )
        for (int i = 0; i <= m; i ++ )
            for (int j = i; j <= m; j ++ )
                for (int k = 0; k <= m; k ++ )
                {
                    int& v = f[u & 1][i][j][k];
                    if (k > j) v = INF;
                    else
                    {
                        register int x = c[u][0], y = c[u][1], z = c[u][2], t = u - 1 & 1;
                        v = f[u - 1 & 1][i][j][k] + z;
                        if (i >= x) v = min(v, f[t][i - x][j][k]);
                        if (j >= x) v = min(v, f[t][min(i, j - x)][max(i, j - x)][k]);
                        if (i >= y && k >= y)
                            v = min(v, f[t][i - y][j][k - y]);
                        if (j >= y && k >= y)
                            v = min(v, f[t][min(i, j - y)][max(i, j - y)][k - y]);
                    }
                }

    int res = INF;
    n &= 1;
    for (int i = 0; i <= m; i ++ )
        for (int j = i; j <= m; j ++ )
            for (int k = 0; k <= j; k ++ )
                res = min(res, f[n][i][j][k] + max(i, j));

    cout << res << endl;
    return 0;
}

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

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

相关文章

晶体晶格热导率的快速可解公式

https://doi.org/10.1016/j.mtphys.2024.101549 晶格热导率(κL)是晶体的一项重要物理性质&#xff0c;在热管理中具有广泛的应用&#xff0c;如散热、绝缘和热电能量转换。 然而&#xff0c;准确、快速地测定κL带来了相当大的挑战。 在这项研究中&#xff0c;引入了一个公式…

计算、谋算(算计)与逻辑

谋算的“逻辑”和计算的逻辑既相似又有区别。 谋算的逻辑通常涉及到策略、计划和决策的制定。它关注的是如何在不确定的情况下&#xff0c;通过分析和推理来达到目标。谋算者会考虑各种可能性&#xff08;01&#xff09;、风险&#xff08;0&#xff09;和利益&#xff08;1&am…

【鸿蒙应用开发】常见的容器组件:ColumnSplit、RowSplit和Flex

上一章已经了解了Column和Row的一些属性&#xff0c;以下是几个案例&#xff1a; 设置子组件水平方向的间距为&#xff1a;5 Entry Preview Component struct Index {State message: string Hello 鸿蒙;controller: webview.WebviewController new webview.WebviewControll…

【Java】Runtime与Properties获取系统信息

Java系列文章目录 补充内容 Windows通过SSH连接Linux 第一章 Linux基本命令的学习与Linux历史 文章目录 Java系列文章目录一、前言二、学习内容&#xff1a;三、问题描述四、解决方案&#xff1a;4.1 代码4.2 运行结果 五、总结&#xff1a; 一、前言 这些都被淘汰比较少用了…

深入研究基于多层卷积和全连接网络结构的数据处理与特征提取方法

1 问题 卷积层的输入输出的shape的计算公式探究多个卷积层加上多个全连接层的输出方法 2 方法 卷积层的输入输出的shape的计算公式&#xff1a;输出形状的计算公式&#xff1a;输出高度 (输入高度 - 卷积核高度 2 * 填充) / 步长 1输出宽度 (输入宽度 - 卷积核宽度 2 * 填…

一码空传临时网盘PHP源码,支持提取码功能

源码介绍 一码空传临时网盘源码V2.0免费授权&#xff0c;该源码提供了一个简单易用的无数据库版临时网盘解决方案。前端采用了layui开发框架&#xff0c;后端使用原生PHP编写&#xff0c;没有引入任何开发框架&#xff0c;保持了代码的简洁和高效。 这个程序使用了一个无数据…

设计模式 装饰模式(Decorator Pattern)

装饰器模式简绍 装饰器模式&#xff08;Decorator Pattern&#xff09;允许向一个现有的对象添加新的功能&#xff0c;同时又不改变其结构。这种类型的设计模式属于结构型模式&#xff0c;它是作为现有的类的一个包装。 装饰器模式的基本结构 装饰器模式的基本结构如下&…

【数据管理】DAMA-数据安全

目录 1、概述 2、数据安全要求来源 3、业务驱动因素 4、目标和原则 5、脆弱性、威胁、风险 6、风险分类 7、安全过程 8、数据完整性 9、混淆或脱敏 10、数据安全类型 11、数据安全制约因素 12、系统安全风险 13、工具 1、概述 数据安全包括安全策略和过程的规划、…

无人机动力系统设计之电调芯片参数选型

无人机动力系统设计之电调芯片参数选型 1. 源由2. 关键因素2.1 电压范围2.2 电流处理能力2.3 控制方式2.4 PWM输出与分辨率2.5 通讯接口2.6 保护功能2.7 支持霍尔传感器与无传感器模式2.8 集成度与外围器件2.9 效率与散热2.10 市场供应与成本 3. 因素阐述3.1 PWM工作频率3.1.1 …

二次规划及其MATLAB实现

引言 二次规划&#xff08;Quadratic Programming, QP&#xff09;是一类重要的优化问题&#xff0c;其目标函数为二次函数&#xff0c;约束条件为线性不等式或等式。二次规划问题在工程、经济、金融等领域有广泛应用&#xff0c;如投资组合优化、人脸表情动画的权重求解、机械…

UE中如何制作后处理设置面板

1&#xff09;UE中如何制作后处理设置面板 2&#xff09;Magica Clothes 2插件与Burst编译问题 3&#xff09;UI大小和文本变量 4&#xff09;如何检索直线与网格的所有交点 这是第399篇UWA技术知识分享的推送&#xff0c;精选了UWA社区的热门话题&#xff0c;涵盖了UWA问答、社…

tabBar设置底部菜单选项以及iconfont图标,setTabBar设置TabBar和下拉刷新API

tabBartabBar属性:设置底部 tab 的表现 ​ ​ ​ ​ 首先在pages.json页面写一个tabBar对象,里面放入list对象数组,里面至少要有2个、最多5个 tab, 如果只有一个tab的话,H5(浏览器)依然可以显示底部有一个导航栏,如果没有,需要重启后才有,小程序则报错,只有2个以上才可以…

51单片机-蜂鸣器介绍-1

作者&#xff1a;王开心 时间&#xff1a;2024.9.11 目的&#xff1a;学习51进阶中。。。 蜂鸣器是一种一体化结构的电子讯响器&#xff0c; 采用直流电压供电&#xff0c; 广泛应用于计算机、 打印机、 复印机、 报警器、 电子玩具、 汽车电子设备、 电话机、 定时器等电子…

数学 |x-2| + 2|x-5| = 12 ,那么x = ?

1、先上图&#xff0c;问了一下AI&#xff0c;这AI的节奏是不认识这个。 2、这个题的解题思路&#xff1a;如何去掉绝对值符号&#xff0c;让这个题看上去正常一些&#xff0c;然后就可以解。 |x-2| 这个代表&#xff0c;x到2的距离。|x-5| 这个代表&#xff0c;x到5的距离。 …

基于SSM的“高校就业管理系统”的设计与实现(源码+数据库+文档)

基于SSM的“高校就业管理系统”的设计与实现&#xff08;源码数据库文档) 开发语言&#xff1a;Java 数据库&#xff1a;MySQL 技术&#xff1a;SSM 工具&#xff1a;IDEA/Ecilpse、Navicat、Maven 系统展示 首界面 后台首页 各管理功能 摘要 本论文主要讲述了基于SSM框…

移动UI案例:交通旅行类整套案例

1. 地图导航&#xff1a; 提供地图展示、路线规划、实时导航等功能&#xff0c;帮助用户找到目的地并提供最佳路线。 2. 公交线路查询&#xff1a; 提供公交车站信息、线路查询、实时公交到站信息等功能&#xff0c;方便用户使用公共交通工具。 3. 实时交通信息&#xff1a;…

0基础跟德姆(dom)一起学AI Python进阶10-算法和数据结构

* 自定义代码-模拟链表 * 删除节点 * 查找节点 * 算法入门-排序类的 * 冒泡排序 * 选择排序 * 插入排序 * 快速排序 * 算法入门-查找类的 * 二分查找-递归版 * 二分查找-非递归版 * 分线性结构-树介绍 * 基本概述 * 特点和分类 * 自定义代码-模拟二叉树 …

windows下关闭解除占用端口的进程

环境&#xff1a;windows 10 场景&#xff1a;启动某一应用程序时&#xff0c;提示其他应用已占用此端口&#xff0c;比如端口2425。 解决步骤&#xff1a; 1/3、打开windows的命令提示符&#xff0c;输入以下命令&#xff0c;查找占用此端口2425的PID号&#xff1a; # win…

winpe是什么意思_winpe制作详细图文教程

有些小白很好奇&#xff0c;winpe是什么意思?所谓的winpe系统其实就是当我们的电脑出现问题而不能进入正常系统时候的一种“紧急备用”系统。如果需要重装操作系统的话&#xff0c;以往采用光盘使用的比较多&#xff0c;随着技术的进步&#xff0c;用u盘制作一个winpe去安装系…

中国(分31省、分196个国家地区、分19个行业)对外直接投资存量及流量(2003-2022年)

2003-2022年中国&#xff08;分31省、分196个国家地区、分19个行业&#xff09;对外直接投资存量及流量_分行业资本存量数据资源-CSDN文库https://download.csdn.net/download/2401_84585615/89475600 相关数据 中国&#xff08;31省&#xff09;对外非金融类直接投资存量及流…