动态规划 DP专题

news2025/1/19 17:21:46

跟着ygg的dp题单刷的dp

1.代码源每日一题 Div1 连续子序列

在这里插入图片描述
分析:
dp数组开成map,则状态转移式dp[i] = max(dp[i - 1] + 1, dp[i])
AC代码:

#include <bits/stdc++.h>

using namespace std;
typedef long long ll;
#define int ll
#define endl '\n'
#define io ios::sync_with_stdio(false),cin.tie(0),cout.tie(0)

const int maxn = 2e5 + 5;
int n;
map<int, int> dp;
int ar[maxn];

signed main()
{
    io;
    cin >> n;
    for(int i = 1; i <= n; ++i) cin >> ar[i];

    for(int i = 1; i <= n; ++i)
    {
        if(!dp.count(ar[i] - 1)) dp[ar[i]] = 1;
        else dp[ar[i]] = max(dp[ar[i]], dp[ar[i] - 1] + 1);
    }

    int mx = 0, id;
    for(auto [x, y] : dp)
    {
        if(y > mx)
        {
            mx = y;
            id = x;
        }
    }

    cout << mx << '\n';
    for(int i = id - mx + 1; i <= id; ++i) cout << i << ' ';

    return 0;
}

2.2022牛客寒假算法基础集训营1 A 九小时九个人九扇门

在这里插入图片描述
在这里插入图片描述
分析:
z = x + y
容易发现:z的数字根 = (x的数字根+y)的数字根
由此,定义dp[i][j](n * 10)表示前i个数字组出j的方案数
状态转移方程:dp[i][calc(j + ar[i])] += dp[i - 1][j]
AC代码:

#include <bits/stdc++.h>

using namespace std;
typedef long long ll;
#define int ll
#define io ios::sync_with_stdio(false),cin.tie(0),cout.tie(0)
#define endl '\n'

const int maxn = 1e5 + 5;
const int mod = 998244353;
int n;
int ar[maxn];
int dp[maxn][15];

int calc(int x)
{
    int tmp;
    while(x >= 10)
    {
        tmp = 0;
        while(x)
        {
            tmp += x % 10;
            x /= 10;
        }
        x = tmp;
    }
    return x;
}

signed main()
{
    io;
    cin >> n;
    for(int i = 1; i <= n; ++i) cin >> ar[i];

    dp[0][0] = 1;
    for(int i = 1; i <= n; ++i)
    {
        for(int j = 0; j <= 9; ++j) (dp[i][j] += dp[i - 1][j]) %= mod;
        for(int j = 0; j <= 9; ++j) (dp[i][calc(j + ar[i])] += dp[i - 1][j]) %= mod;
    }

    for(int i = 1; i <= 9; ++i) cout << dp[n][i] << ' ';

    return 0;
}

3.AtCoder Beginner Contest 230 F(dp + 贪心 + 前缀和)

在这里插入图片描述
在这里插入图片描述
分析:
dp[i]表示操作前i个数字一共可以产生多少种不同的序列
新增数字ar[i]。
首先,将可以这个数字放在dp[i-1]种序列最后不做操作
其次,可以和dp[i-1]种序列的最后一个元素合并
但是, d p [ i ] ≠ d p [ i − 1 ] ∗ 2 dp[i] \neq dp[i - 1] * 2 dp[i]=dp[i1]2
因为会有重复的,我们将序列分为3段。
ar[1~j] ar[j+1~i-1] ar[i]
分成三段后,可以发现序列进一步合并的话,可以有两种情况,一是合并ar[1~i-1],形成序列ar[1~i-1] ar[i]。二是合并ar[j+1~i],形成序列ar[1~j] ar[j+1~i]
可以发现,当且仅当sum[j+1~i-1]=0时两个序列是相同的,数量是dp[j]
因此,只需要找到位置i左边的第一个j满足sum[i-1]-sum[j]=0即可,减去dp[j]。(前面满足条件的j的数量包括在左边第一个里面)。
AC代码:

#include <bits/stdc++.h>

using namespace std;
typedef long long ll;
#define int ll
#define io ios::sync_with_stdio(false),cin.tie(0),cout.tie(0)
#define endl '\n'

const int maxn = 2e5 + 5;
const int mod = 998244353;
const int inf = 0x3f3f3f3f;
int n;
int ar[maxn];
map<int,int> mp;
int sum[maxn];
int dp[maxn];

signed main()
{
    io;
    cin >> n;
    for(int i = 1; i <= n; ++i) cin >> ar[i];
    for(int i = 1; i <= n; ++i) sum[i] = sum[i - 1] + ar[i];

    dp[1] = 1;
    for(int i = 2; i <= n; ++i)
    {
        dp[i] = (dp[i - 1] * 2ll) % mod;
        if(mp.count(sum[i - 1])) dp[i] = ((dp[i] - dp[mp[sum[i - 1]]]) % mod + mod) % mod;
        mp[sum[i - 1]] = i - 1;
    }

    cout << dp[n] << '\n';

    return 0;
}

4.E - Average and Median(二分+DP)

在这里插入图片描述
分析:
二分平均数和中位数。
对于平均数mid,构造数组br[i] = ar[i] - mid,之后定义dp[i]表示在满足条件下选完区间1~i且选取br[i]的最大值,转移方程dp[i] = max(dp[i - 1], dp[i - 2]) + br[i]。返回max(dp[n], dp[n - 1]) >= 0即可。
对于中位数mid同理,构造数组br[i] = ar[i] >= mid ? i : 0,相同的dp一遍即可。
AC代码:

#include <bits/stdc++.h>

using namespace std;
typedef long long ll;
#define int ll
#define io ios::sync_with_stdio(false),cin.tie(0),cout.tie(0)
#define endl '\n'
#define pii pair<int,int>

const int maxn = 1e5 + 5;
const int mod = 998244353;
const int inf = 0x3f3f3f3f;
const double eps = 1e-4;
int n;
int ar[maxn];
double br[maxn];
double dp1[maxn];
int dp2[maxn];

bool judge1(double x)
{
    for(int i = 1; i <= n; ++i) br[i] = (double)ar[i] - x;
    dp1[1] = br[1];
    dp1[2] = max(0.0, br[1]) + br[2];
    for(int i = 3; i <= n; ++i) dp1[i] = max(dp1[i - 1], dp1[i - 2]) + br[i];
    if(dp1[n] >= 0 || dp1[n - 1] >= 0) return true;
    else return false;
}

void work1()
{
    double l = 0, r = 1e9;
    while(r - l >= eps)
    {
        double mid = (l + r) / 2.0;
        if(judge1(mid)) l = mid;
        else r = mid;
    }

    cout << fixed << setprecision(4) << l << '\n';
}

bool judge2(int k)
{
    //for(int i = 1; i <= n; ++i) br[i] = (ar[i] >= k ? 1 : -1);
    dp2[1] = (ar[1] >= k ? 1 : -1);
    dp2[2] = max(0ll, dp2[1]) + (ar[2] >= k ? 1 : -1);
    for(int i = 3; i <= n; ++i) dp2[i] = max(dp2[i - 1], dp2[i - 2]) + (ar[i] >= k ? 1 : -1);
    if(dp2[n] > 0 || dp2[n - 1] > 0) return true;
    else return false;
}

void work2()
{
    int l = 1, r = (ll)1e9;
    while(l <= r)
    {
        int mid = (l + r) >> 1;
        if(judge2(mid)) l = mid + 1;
        else r = mid - 1;
    }

    cout << l - 1 << '\n';
}

signed main()
{
    io;
    cin >> n;
    for(int i = 1; i <= n; ++i) cin >> ar[i];

    work1();

    work2();

    return 0;
}

5.代码源每日一题 Div1 拆方块(dp/思维)

在这里插入图片描述
在这里插入图片描述
分析:
对于一列方格被完全删除掉,有三种情况,一是其左侧没有方格后,它会被删掉,我们认为它是被其左侧的方格删除,二是,其右侧没有方格后。三是其左右两侧的方格都足够多,它只能通过它自己一个一个的删除掉,这种情况需要操作h[i]次。
对于第一种情况,我们定义dp1[i]为第i列被其左侧删掉的情况需要操作多少次,转移方程dp1[i] = max(dp1[i - 1] + 1,h[i])。被其右侧删掉同理。
最后ans = max(ans, min(dp1[i], dp2[i]))
AC代码:

#include <bits/stdc++.h>

using namespace std;
typedef long long ll;
#define int ll
#define io ios::sync_with_stdio(false),cin.tie(0),cout.tie(0)
#define endl '\n'
#define pii pair<int,int>

const int maxn = 1e5 + 5;
const int mod = 998244353;
const int inf = 0x3f3f3f3f;
const double eps = 1e-4;
int n;
int ar[maxn];
int dp1[maxn];
int dp2[maxn];

signed main()
{
    io;
    cin >> n;
    for(int i = 1; i <= n; ++i) cin >> ar[i];

    dp1[0] = 0;
    for(int i = 1; i <= n; ++i) dp1[i] = min(ar[i], dp1[i - 1] + 1);
    dp2[n + 1] = 0;
    for(int i = n; i > 0; --i) dp2[i] = min(ar[i], dp2[i + 1] + 1);

    int ans = 0;
    for(int i = 1; i <= n; ++i) ans = max(ans, min(dp1[i], dp2[i]));
    cout << ans << '\n';

    return 0;
}

6.2019 CCPC哈尔滨 I. Interesting Permutation

在这里插入图片描述
分析:
方法一:
首先,容易发现h[i]需要满足一些条件才会有解。
1.h[0] = 0,h[n] = n - 1
2.h[i] >= h[i - 1]
3.h[i] >= i - 1
之后,我们定义dp[i]表示对于区间1~i可以有多少种不同的数组a,对于状态转移方程,我们考虑两种情况。
1.h[i] = h[i - 1]
意思是说添加ar[i]后,h[i]不会发生变化,故g[i] < ar[i] < f[i],并且是前i-1个数中没有被选过的,这样的数字一共有ar[i - 1] - 1 - (i - 3)个,故此时dp[i] = dp[i - 1] * (ar[i - 1] - 1 - (i - 3))
2.h[i] != h[i - 1]
cx = h[i] - h[i] - 1,此时应当满足ar[i] = g[i - 1] - cx或者ar[i] = f[i - 1] + cx,所以大体上看dp[i] = dp[i - 1] * 2,但是不然,因为这样看的话ar[i]的取值可能取到小于等于0的数字,或者大于n的数字。我们考虑将这些不符合的减掉。
考虑ar[i]的放置时,前i-1个数字排序方式是不影响的,故我们考虑将选择了相同i-1个数字的数组看成同一种并将他们从小到大排序,之后在分类。
第1种: 1, i - 3个数字, h[i - 1] + 1
第2种: 2, i - 3个数字, h[i - 1] + 2

n-h[i - 1]种: n - h[i - 1], i - 3个数字, n
容易发现每种ar[i]数组对应的原本数组数量是相同的(dp[i-1]种ar[i]数组中,通过排序变成第1种,第2种,…,第n-h[i-1]种数量是相同的)。
可以发现对于第1~cx种,ar[i]的取值只能是f[i - 1] + cx
对于第n-h[i-1]-cx+1~n-h[i-1]种,ar[i]的取值只能是g[i - 1] - cx
容易发现,这两者对应的数组种类也是不相交的,即满足n-h[i-1]-cx+1 > cx,故需要将这些减去。
转移方程dp[i] = dp[i - 1] * 2 - dp[i - 1] / (n - h[i - 1]) * 2 * cx

方法二:(idea from ygg)
整个过程相当于维护一个桶,对于h[i],需要一个大小为h[i]+1的桶
遍历1~n,过程中维护桶的大小siz和答案ans
如果h[i] + 1 > siz则需要将桶的上界或者下界扩大,即ans *= 2
否则,则需要向桶里添加数字,剩下的可添加的数字有siz - (i - 1)个,故ans *= siz - (i - 1)

AC代码:

#include <bits/stdc++.h>

using namespace std;
typedef long long ll;
#define int ll
#define io ios::sync_with_stdio(false),cin.tie(0),cout.tie(0)
#define endl '\n'
#define pii pair<int,int>

const int maxn = 1e5 + 5;
const int mod = 1e9 + 7;
const int inf = 0x3f3f3f3f;
const double eps = 1e-4;
int t, n;
int ar[maxn];
int dp[maxn];

ll pow_mod(ll a, ll n)
{
    ll ans = 1;
    a %= mod;
    while(n)
    {
        if(n & 1) ans = (ans * a) % mod;
        a = (a * a) % mod;
        n >>= 1;
    }
    return ans;
}

void work()
{
    cin >> n;
    for(int i = 1; i <= n; ++i) cin >> ar[i];
    for(int i = 1; i <= n; ++i)
    {
        if(ar[i] < ar[i - 1] || ar[i] < i - 1)
        {
            cout << 0 << '\n';
            return ;
        }
    }
    if(ar[1] != 0 || ar[n] != n - 1)
    {
        cout << 0 << '\n';
        return ;
    }

    dp[1] = n;
    int cx;
    for(int i = 2; i <= n; ++i)
    {
        cx = ar[i] - ar[i - 1];
        if(cx) dp[i] = (((2ll * dp[i - 1]) % mod - ((2ll * dp[i - 1] * cx) % mod * pow_mod(n - ar[i - 1], mod - 2)) % mod) % mod + mod) % mod;
        else dp[i] = (dp[i - 1] * (ar[i - 1] - 1 - i + 3)) % mod;
    }

    cout << dp[n] << '\n';
}

signed main()
{
    io;
    cin >> t;
    while(t--) work();
    return 0;
}

#include <bits/stdc++.h>

using namespace std;
typedef long long ll;
#define int ll
#define io ios::sync_with_stdio(false),cin.tie(0),cout.tie(0)
#define endl '\n'
#define pii pair<int,int>

const int maxn = 1e5 + 5;
const int mod = 1e9 + 7;
const int inf = 0x3f3f3f3f;
const double eps = 1e-4;
int t, n;
int ar[maxn];
int dp[maxn];

void work()
{
    cin >> n;
    for(int i = 1; i <= n; ++i) cin >> ar[i];
    for(int i = 1; i <= n; ++i)
    {
        if(ar[i] < ar[i - 1] || ar[i] < i - 1)
        {
            cout << 0 << '\n';
            return ;
        }
    }
    if(ar[1] != 0 || ar[n] != n - 1)
    {
        cout << 0 << '\n';
        return ;
    }

    dp[1] = 1;
    int cx;
    for(int i = 2; i <= n; ++i)
    {
        cx = ar[i] - ar[i - 1];
        if(cx) dp[i] = dp[i - 1] * 2ll % mod;
        else dp[i] = (dp[i - 1] * (ar[i] + 1 - i + 1)) % mod;
    }

    cout << dp[n] << '\n';
}

signed main()
{
    io;
    cin >> t;
    while(t--) work();
    return 0;
}

7. daimayuan 671. 优美!最长上升子序列(倍数遍历)

在这里插入图片描述
分析:
倍数遍历,nlogn,水题
AC代码:

#include <bits/stdc++.h>

using namespace std;
typedef long long ll;
#define int ll
#define io ios::sync_with_stdio(false),cin.tie(0),cout.tie(0)
#define endl '\n'
#define pii pair<int,int>

const int maxn = 1e6 + 5;
const int mod = 1e9 + 7;
const int inf = 0x3f3f3f3f;
const double eps = 1e-4;
int t, n;
int ar[maxn];
int dp[maxn];
vector<int> vt[maxn];

void work()
{
    scanf("%d", &n);
    for(int i = 1; i <= n; ++i) scanf("%d", &ar[i]);
    for(int i = 0; i <= n; ++i) dp[i] = 1;

    int mx = 0;
    for(int i = 1; i <= n; ++i)
    {
        for(int j = 2 * i; j <= n; j += i)
        {
            if(ar[i] < ar[j]) dp[j] = max(dp[j], dp[i] + 1);
        }
    }

    for(int i = 1; i <= n; ++i) mx = max(mx, dp[i]);
    cout << mx << '\n';
}

signed main()
{
    io;
    cin >> t;
    while(t--) work();
    return 0;
}

8.daimayuan 709. 最大权值划分(分类讨论)

在这里插入图片描述
分析:
观察发现,分割之后的每个序列如果内部不单调,那么一定不是最优的。
故可以分别考虑当前这个数在一个递增序列或者在一个递减序列的最大值。
AC代码:

#include <bits/stdc++.h>

using namespace std;
typedef long long ll;
#define int ll
#define io ios::sync_with_stdio(false),cin.tie(0),cout.tie(0)
#define endl '\n'
#define pii pair<int,int>

const int maxn = 1e6 + 5;
const int mod = 1e9 + 7;
const int inf = 0x3f3f3f3f;
int n;
int ar[maxn];
int dp[3][maxn];

signed main()
{
    io;
    cin >> n;
    for(int i = 1; i <= n; ++i) cin >> ar[i];

    for(int i = 2; i <= n; ++i)
    {
        if(ar[i] > ar[i - 1])
        {
            dp[1][i] = max(dp[1][i - 1] + ar[i] - ar[i - 1], dp[0][i - 1]);
            dp[0][i] = max(dp[1][i - 1], dp[0][i - 1]);
        }
        else
        {
            dp[1][i] = max(dp[1][i - 1], dp[0][i - 1]);
            dp[0][i] = max(dp[0][i - 1] + ar[i - 1] - ar[i], dp[1][i - 1]);
        }
    }

    cout << max(dp[1][n], dp[0][n]) << '\n';

    return 0;
}

9.daimayuan741 最长有趣子序列(贪心/dp)

在这里插入图片描述
分析:
定义dp[i]为最后一个数字的第i位为1的序列的最长长度。
对于ar[i],枚举其每一位,假设其第j位是1,则dp[j]++,过程中维护mx=max(mx, dp[j])
之后将所有的dp[j]赋为mx
AC代码:

#include <bits/stdc++.h>

using namespace std;
typedef long long ll;
#define int ll
#define io ios::sync_with_stdio(false),cin.tie(0),cout.tie(0)
#define endl '\n'
#define pii pair<int,int>

const int maxn = 1e6 + 5;
const int mod = 1e9 + 7;
const int inf = 0x3f3f3f3f;
int n;
int ar[maxn];
int dp[35];

void calc(int x)
{
    int tmp = ar[x], id = 0, mx = 0;
    while(tmp)
    {
        ++id;
        if(tmp&1)
        {
            ++dp[id];
            mx = max(mx, dp[id]);
        }
        tmp >>= 1;
    }

    tmp = ar[x];
    id = 0;
    while(tmp)
    {
        ++id;
        if(tmp&1) dp[id] = max(dp[id], mx);
        tmp >>= 1;
    }
}

signed main()
{
    io;
    cin >> n;
    for(int i = 1; i <= n; ++i) cin >> ar[i];

    for(int i = 1; i <= n; ++i) calc(i);

    int mx = 0;
    for(int i = 1; i <= 32; ++i) mx = max(mx, dp[i]);
    cout << mx << '\n';

    return 0;
}

10.Codeforces Round #785 (Div. 2) C. Palindrome Basis(完全背包)

题意:
给定一个数字n(1<=n<=4e4),问n可以由多少种不同的回文数的相加表示。
对于5
在这里插入图片描述
分析:
4e4内回文数一共不到500个,预处理处理,之后就是一个完全背包统计方案数的过程
AC代码:

#include <bits/stdc++.h>

using namespace std;
typedef long long ll;
#define int ll
#define io ios::sync_with_stdio(false),cin.tie(0),cout.tie(0)
#define endl '\n'
#define pii pair<int,int>

const int maxn = 4e4 + 5;
const int mod = 1e9 + 7;
const int inf = 0x3f3f3f3f;
int t, n;
int ar[maxn];
int dp[maxn];
vector<int> vt;

bool judge(int x)
{
    int tmp = x, res = 0;
    while(tmp)
    {
        res = res * 10 + tmp % 10;
        tmp /= 10;
    }
    return x == res;
}

void init()
{
    for(int i = 1; i <= maxn; ++i) if(judge(i)) vt.push_back(i);

    dp[0] = 1;
    for(int j = 0; j < vt.size(); ++j)
    {
        for(int i = 1; i <= 4e4; ++i)
        {
            if(i >= vt[j]) (dp[i] += dp[i - vt[j]]) %= mod;
        }
    }
}

void work()
{
    cin >> n;
    cout << dp[n] << '\n';
}

signed main()
{
    io;
    init();
    cin >> t;
    while(t--) work();
    return 0;
}

11.daimayuan 852. 货币系统(完全背包)

在这里插入图片描述
分析:
对于小t的付款方式可以通过一个简单的dp1搞出来
对于最优的付款方式也是一个完全背包方案数的问题。
另外,具体要考虑到买多贵的东西,瞎猜的2*ar[n]正确了,据说实际到ar[n] + ar[n - 1]即可。
AC代码:

#include <bits/stdc++.h>

using namespace std;
typedef long long ll;
#define int ll
#define io ios::sync_with_stdio(false),cin.tie(0),cout.tie(0)
#define endl '\n'
#define pii pair<int,int>

const int maxn = 1e5 + 5;
const int mod = 1e9 + 7;
const int inf = 0x3f3f3f3f;
int t, n;
int ar[maxn];
int dp1[maxn];
int dp2[maxn];

void work()
{
    cin >> n;
    for(int i = 1; i <= n; ++i) cin >> ar[i];

    int pos;
    for(int i = 1; i <= ar[n] + ar[n - 1]; ++i)
    {
        dp2[i] = i;
        pos = lower_bound(ar + 1, ar + n + 1, i) - ar;
        if(ar[pos] == i) dp1[i] = 1;
        else
        {
            --pos;
            dp1[i] = i / ar[pos];
            dp1[i] += dp1[i % ar[pos]];
        }
    }

    dp2[0] = 0;
    for(int i = 1; i <= n; ++i)
    {
        for(int j = 0; j <= ar[n] + ar[n - 1]; ++j)
        {
            dp2[j + ar[i]] = min(dp2[j + ar[i]], dp2[j] + 1);
        }
    }

    for(int i = 1; i <= ar[n] + ar[n - 1]; ++i)
    {
        if(dp2[i] < dp1[i])
        {
            cout << "No\n";
            return ;
        }
    }

    cout << "Yes\n";
}

signed main()
{
    io;
    cin >> t;
    while(t--) work();
    return 0;
}

12.Codeforces Round #697 (Div. 3) G. Strange Beauty(倍数遍历)

在这里插入图片描述
分析:
dp[i]表示集合中最大的数字是i的情况下,集合最大是多少,倍数遍历转移即可。
AC代码:

#include <bits/stdc++.h>

using namespace std;
typedef long long ll;
#define int ll
#define io ios::sync_with_stdio(false),cin.tie(0),cout.tie(0)
#define endl '\n'
#define pii pair<int,int>

const int maxn = 2e5 + 5;
const int mod = 1e9 + 7;
const int inf = 0x3f3f3f3f;
int t, n;
int ar[maxn];
int dp[maxn];
int num[maxn];

void work()
{
    cin >> n;
    for(int i = 1; i <= n; ++i) cin >> ar[i];

    sort(ar + 1, ar + n + 1);
    for(int i = 1; i <= ar[n]; ++i) dp[i] = num[i] = 0;
    for(int i = 1; i <= n; ++i) ++num[ar[i]];
    for(int i = 1; i <= ar[n]; ++i) if(num[i]) dp[i] = num[i];

    for(int i = 1; i <= ar[n]; ++i)
    {
        if(!num[i]) continue;
        for(int j = 2 * i; j <= ar[n]; j += i)
        {
            if(!num[j]) continue;
            dp[j] = max(dp[j], dp[i] + num[j]);
            //cout << i << ' ' << j << ' ' << dp[j] << '\n';
        }
    }

    int mx = 0;
    for(int i = 1; i <= ar[n]; ++i) mx = max(dp[i], mx);
    cout << n - mx << '\n';
}

signed main()
{
    io;
    cin >> t;
    while(t--) work();
    return 0;
}

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

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

相关文章

Day814.电商系统表设计优化案例分析 -Java 性能调优实战

电商系统表设计优化案例分析 Hi&#xff0c;我是阿昌&#xff0c;今天学习记录的是关于电商系统表设计优化案例分析。 如果在业务架构设计初期&#xff0c;表结构没有设计好&#xff0c;那么后期随着业务以及数据量的增多&#xff0c;系统就很容易出现瓶颈。 如果表结构扩展…

CentOS7.9 安装配置MySQL5.7.30

1.下载mysql安装包&#xff1a;mysql-5.7.30-linux-glibc2.12-x86_64.tar.gz 2. 卸载自带的mariadb和mysql 检查是否安装了mariadb和mysql&#xff0c;有时候默认安装了 rpm -qa | grep mariadb rpm -qa | grep mysql 如果没有&#xff0c;就可以安装mysql&#xff0c;如果有&a…

Centos7搭建SVN代码控制服务器

Centos7搭建SVN代码控制服务器检查SVN是否安装创建SVN版本库配置代码库设置允许访问远程仓库的用户帐号密码设置权限控制设置SVN服务配置启动svn与停止启动SVN关闭SVN访问拉取远程仓库代码检查SVN是否安装 1、centos7系统自带SVN rpm -qa subversion2、如果没有则通过yum安装 …

[论文精读|博士论文]面向文本数据的关系抽取关键技术研究

电子科技大学 2022.3.15博士论文 实体关系的方向性语义缺失&#xff0c;使得关系的判别缺乏对文本蕴含语义特征的利用 提出——基于句法关系的方向敏感型句子级关系抽取算法 利用依存句法树结构信息构建双向依存路径结构&#xff08;新的文本策略解决过度剪裁&#xff09;额外…

构建直接序列扩频系统模型(Matlab代码实现)

&#x1f352;&#x1f352;&#x1f352;欢迎关注&#x1f308;&#x1f308;&#x1f308; &#x1f4dd;个人主页&#xff1a;我爱Matlab &#x1f44d;点赞➕评论➕收藏 养成习惯&#xff08;一键三连&#xff09;&#x1f33b;&#x1f33b;&#x1f33b; &#x1f34c;希…

【分析笔记】全志 i2c-sunxi.c 控制器驱动分析

分析平台&#xff1a;全志 A64 内核版本&#xff1a;Linux 4.9 数据手册&#xff1a;Allwinner_A64_User_Manual_V1.1.pdf (whycan.com) 驱动框架 I2C 设备驱动 作为方案应用来说&#xff0c;我们是最经常要动的地方&#xff0c;这一层主要与具体的芯片功能强关联&#xff0c…

RK3588平台开发系列讲解(USB篇)内核 USB 配置

平台内核版本安卓版本RK3588Linux 5.10Android 12文章目录 一、USB PHY CONFIG二、USB Host CONFIG三、USB OTG CONFIG四、USB Gadget CONFIG沉淀、分享、成长,让自己和他人都能有所收获!😄 📢本篇将介绍USB的相关配置。 USB 模块的配置及保存和其它内核模块的配置方法一…

英语考试的作文模板

考试需要&#xff0c;但是老是忘记&#xff0c;所以发出来备忘~~~~~ 这里写目录标题1 高频考点&#xff1a;正面话题 (能力/事情/习惯/行为/品质/意识/习惯&#xff09;1.1 题干关键词与结构1.2 开头段1.3 主体段2 一起写范文【正面话题】主体段&#xff1a;重要性怎么做重要性…

【AI学习笔记】jupyter notebook 默认路径修改(超简介,超详细)

文章目录修改前&#xff1a;修改notebook默认路径&#xff1a;1. 找到 Anaconda 的安装目录2. 修改 notebook 安装位置3. 删除"%USERPROFILE%/"内容修改后&#xff1a;【声明&#xff1a;由于我的电脑有 Anaconda3的root环境 和 名为TensorFlow 的 Anaconda虚拟环境&…

操作系统学习笔记(Ⅱ):进程

目录 1 进程 1.1 定义、组成、组织方式与特征 1.定义 2.组成 ​3.组织方式 4.进程的特征 1.2 进程的状态与转换 1.状态 2.进程状态的转换 1.3 进程控制 1.基本概念 2.进程控制相关的原语 1.4 进程通信 1.共享存储 2.消息传递 3.管道通信 1.5 线程概念和多线…

Python数据分析实战-实现模型K折交叉验证(附源码和实现效果)

前面我介绍了可视化的一些方法以及机器学习在预测方面的应用&#xff0c;分为分类问题&#xff08;预测值是离散型&#xff09;和回归问题&#xff08;预测值是连续型&#xff09;&#xff08;具体见之前的文章&#xff09;。 从本期开始&#xff0c;我将做一个数据分析类实战…

mybatisplus savebatch 多数据源时候,sqlSessionFactory 不正确踩坑记录。

记录一下 mybatis-plus sharding-JDBC 的时候&#xff0c;因为配置多数据源和多个SqlSessionFactory导致 mybatisPlus 执行 saveBatch 异常的问题。 具体异常就是 saveBatch 执行的数据源&#xff0c;与期望的不一致。其实是因为 SqlSessionFactory 错误导致的。 项目中有2个…

程序员第一次接私活?记住这三点让你事半功倍

不少程序员都有接私活的想法&#xff0c;但恰恰就如开发者之间的论调一样&#xff0c;接私活其实是有一定难度的&#xff0c;想找到合适的单子&#xff0c;顺利地做完并拿到薪水&#xff0c;需要注意的事儿很多&#xff0c;接下来和大家分享一下&#xff0c;程序员第一次接私活…

改进的多目标差分进化算法在电力系统环境经济调度中的应用(Python代码实现)【电气期刊论文复现】

&#x1f389;&#x1f389;&#x1f389;&#x1f389;欢迎您的到来&#x1f60a;&#x1f60a;&#x1f60a; &#x1f96c;博客主页&#xff1a;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 &#x1f4dd;床头铭&#xff1a;将来的我一定会感谢…

[附源码]计算机毕业设计springbootSwitch交流平台

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

Android 插件化

demo 如果要加载插件模块编译的apk插件包中的Activity类&#xff0c;需要执行如下流程&#xff1a; 1&#xff09;加载类对象&#xff1a;使用DexClassLoader加载Activity对应的Class字节码类对象&#xff1b; 2&#xff09;管理生命周期&#xff1a;处理加载进来的Activity…

【算法自由之路】前缀树 桶排序之计数排序和基数排序

【算法自由之路】前缀树 & 桶排序之计数排序和基数排序 前缀树&#xff08;字典树&#xff09; 首先是前缀树&#xff0c;前缀树是由字符构成的树结构&#xff0c;它记录有多少前缀字符通过&#xff0c;以及有多少个同样的字符串&#xff0c;其找这类信息的时间复杂度是极…

minigui编译移植

minigui编译移植 一:文件系统依赖支持二:交叉编译libminigui-1.6.10三:交叉编译mg-samples-1.6.10四:资源minigui-res-1.6.10四:开发板拷贝资源五:/etc/MiniGUI.cfg配置文件修改六:系统环境变量设置一:文件系统依赖支持 zlib libpng libjpeg 二:交叉编译libminigui-1.6.10 conf…

第五届安洵杯网络挑战赛WP

Crypto Cry1 crypto签到题&#xff0c;就是先对SHA256的哈希值进行爆破&#xff0c;然后猜数字 用hashcat一条命令秒穿 hashcat --custom-charset1 ?d?l?u -a 3 -m 1400 3075696ea46516c3a0a43930fab5a0f1c68ea4b315dd87a9cd123dac7f20f3a6 ?1?1?1?1GJWVMYlh5ApWLbF…

MySQL源码分析之SQL函数执行

1.MySQL中执行一条SQL的总体流程 一条包含函数的SQL语句&#xff0c;在MySQL中会经过: 客户端发送&#xff0c;服务器连接&#xff0c;语法解析&#xff0c;语句执行的过程。 调试源码&#xff0c;分析函数的具体执行过程&#xff0c;在客户端&#xff0c;执行select to_char…