rt,赛时爆零,赛后发现思路正确,不知道为什么错qwq
#include<bits/stdc++.h>
using namespace std;
const int N = 505;
int n, k, sum;
int a[N], b[N];
int be[N], en[N];
int dp[N][N];//前i个选j个,最大值。
int main()
{
std::ios::sync_with_stdio(false);
cin.tie(0), cout.tie(0);
cin >> n >> k;
for(int i = 1; i <= n; i++)
{
cin >> a[i];
if(!be[a[i]]) be[a[i]] = i, sum = max(sum, a[i]);
en[a[i]] = i;
}
for(int i = 1; i <= n; i++) cin >> b[i];
dp[1][1] = b[1];
for(int i = 2; i <= sum; i++)
{
for(int l = 1; l <= i; l++)
{
for(int j = 1; j < i; j++)
{
if(en[j] < be[i] && en[j] != 0)
{
dp[i][l] = max(dp[i][l], dp[j][l - 1] + b[i]);
}
}
}
}
// for(int i = 1; i <= sum ; i++)
// {
// for(int j = 1; j <= k; j++) cout << dp[i][j] << " ";
// cout << "\n";
// }
int ans = dp[sum][k];
if(ans == 0) ans = -1;
cout << ans;
return 0;
}