求dalao纠错
  • 板块P9688 Colo.
  • 楼主Ruanyy
  • 当前回复3
  • 已保存回复3
  • 发布时间2023/10/2 19:24
  • 上次更新2023/11/2 16:29:45
查看原帖
求dalao纠错
857162
Ruanyy楼主2023/10/2 19:24
#include <iostream>
#include <algorithm>
#include <cstring>
using namespace std;

typedef long long LL;
const int N=1005;
int n,k;
LL A[N],w[N];
LL dp[N][N];
int l[N],r[N];

void solve()
{
	for(int i=0;i<=k;i++)
		for(int j=0;j<=500;j++)
			dp[i][j]=-1e12;
	for(int i=1;i<=n;i++)
	{
		int a=A[i];
		 dp[1][a]=w[a];
		for(int j=2;j<=a;j++)
			for(int b=j-1;b<a;b++)
				if(r[b]&&l[a]>r[b]) dp[j][a]=max(dp[j][a],dp[j-1][b]+w[a]);
	}
	LL res=0;
	for(int i=k;i<=500;i++) res=max(res,dp[k][i]);
	if(res>0)
		printf("%d",res);
	else
		printf("-1");
}

int main()
{
	scanf("%d%d",&n,&k);
	memset(l,0x3f,sizeof l); 
	for(int i=1;i<=n;i++)
	{
		scanf("%d",&A[i]);
		l[A[i]]=min(l[A[i]],i);
		r[A[i]]=max(r[A[i]],i);
	} 
    for(int i=1;i<=n;i++) scanf("%d",&w[i]);
    solve();
}
2023/10/2 19:24
加载中...