求大佬纠错
  • 板块P9688 Colo.
  • 楼主2021sunzishan
  • 当前回复4
  • 已保存回复4
  • 发布时间2023/10/2 22:55
  • 上次更新2023/11/2 16:26:04
查看原帖
求大佬纠错
557270
2021sunzishan楼主2023/10/2 22:55

rt,不知道哪错了,样例过了

f[i][j]表示前i种颜色留了j种最大价值

求求了,哪错了……

#include <bits/stdc++.h>
using namespace std;
#define int long long
int n,m;
int ls[505],b[505],f[505][505],l[505],r[505];
bool vis[505];
struct node {
	int l,r;
	int v,s,id;
} a[505];
inline int read() {
	int a=0,f=1;
	char c=getchar();
	while(c<'0'||c>'9') {
		if  (c=='-') f=-1;
		c=getchar();
	}
	while(c>='0'&&c<='9') {
		a=a*10+(c-'0');
		c=getchar();
	}
	return f*a;
}
main() {
//	freopen(".in","r",stdin);
//	freopen(".out","w",stdout);
	n=read(),m=read();
	for(int i=1; i<=n; i++) {
		ls[i]=read();
		vis[ls[i]]=1,r[ls[i]]=i;
	}
	for(int i=n; i>=1; i--)
		l[ls[i]]=i;
	for(int i=1; i<=n; i++)b[i]=read();
	int cnt=0;
	for(int i=1; i<=n; i++)
		if(vis[i]) {
			a[++cnt].v=b[i];
			a[cnt].id=i;
		}
	int ans=-1;
	memset(f,-1,sizeof(f));
	f[0][0]=0;
	for(int i=1; i<=cnt; i++){
		for(int j=1; j<=min(i,m); j++) {
			f[i][j]=f[i-1][j];
			for(int k=0; k<i; k++) {
				if(l[a[i].id]<r[a[k].id]||f[k][j-1]==-1)continue;
				f[i][j]=max(f[i][j],f[k][j-1]+a[i].v);
			}
		}
		ans=max(ans,f[i][m]);
	}
	printf("%lld\n",ans);
	return 0;
}

2023/10/2 22:55
加载中...