80分C++求助
查看原帖
80分C++求助
602171
Ian_NIE楼主2023/11/9 12:45

代码:

#include <iostream>
#include <algorithm>
#include <cstring>
#define int long long
using namespace std;

int p, n, m, k, dp[205][50], sum[205][205];
string s = " ", str, a[10];

bool chk(int l, int r)
{
    string sub = s.substr(l, r - l + 1);
    for(int i = 1; i <= n; i++)
        if(sub.find(a[i]) == 0)
            return true;
    return false;
}

signed main()
{
    cin >> p >> k;
    for(int i = 1; i <= p; i++) cin >> str, s += str;
    cin >> n, m = s.length() - 1;
    for(int i = 1; i <= n; i++) cin >> a[i];
    for(int i = m; i >= 1; i--)
        for(int j = i; j >= 1; j--)
        {
            sum[j][i] = sum[j + 1][i];
            if(chk(j, i)) sum[j][i]++;
        }
    for(int i = 1; i <= k; i++)
        dp[i][i] = dp[i - 1][i - 1] + sum[i][i];
    for(int i = 1; i <= m; i++)
        dp[i][1] = sum[1][i];
    for(int i = 1; i <= m; i++)
        for(int j = 1; j <= k && j < i; j++)
            for(int l = j; l <= i; l++)
                dp[i][j] = max(dp[i][j], dp[l][j - 1] + sum[l + 1][i]);
    cout << dp[m][k] << endl;
    
    return 0;
}

评测结果

求助~~~

2023/11/9 12:45
加载中...