怎么错的?
查看原帖
怎么错的?
606278
封禁用户楼主2024/8/18 23:49
// n<=1000 m<=20 1<=k<m
#include<bits/stdc++.h>
using namespace std;
const int MAXN=1005;

int a[MAXN],dp[MAXN][MAXN];
map<int,int> mp;

int main(){
	int n,m,lim;
	cin >> n >> m >> lim;
	for (int i=1;i<=n;i++)
		cin >> a[i];

	int cnt=0;
	for (int i=1;i<=n;i++){
		if (mp.size()==lim and mp[a[i]]==0){
			cnt++;
			mp.clear();
		}
		mp[a[i]]++;
	}
	cnt++;
	cout << cnt << endl;
	for (int i=0;i<=1001;i++)
		for (int j=0;j<=1001;j++)
			dp[i][j]=1e9;
	dp[0][0]=0;
	for (int j=1;j<=cnt;j++)
		for (int i=j;i<=n;i++){
			mp.clear();
			for (int k=i;k>=1;k--){
				mp[a[k]]++;
				if (mp.size()>lim) break;
				dp[i][j]=min(dp[i][j],dp[k-1][j-1]+int(mp.size()));
			}
		}
	cout << dp[n][cnt];

	return 0;
}

心态调崩了(半夜写的,状态不行,制杖错误别喷)

2024/8/18 23:49
加载中...