0分求助qwq
  • 板块P9688 Colo.
  • 楼主zhangxiao666
  • 当前回复6
  • 已保存回复6
  • 发布时间2023/10/3 09:07
  • 上次更新2023/11/2 16:24:21
查看原帖
0分求助qwq
742017
zhangxiao666楼主2023/10/3 09:07

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;
} 

2023/10/3 09:07
加载中...