蒟蒻求助!70分,RE P4158 [SCOI2009]粉刷匠
查看原帖
蒟蒻求助!70分,RE P4158 [SCOI2009]粉刷匠
153139
风羽跃楼主2021/7/9 18:40
#include<cstdio>
#include<iostream>
#include<cstring>
#include<vector>

#define maxn 55
#define maxm 2505 

using namespace std;

int n,m,t;

string s[maxn];
vector<int>len[maxn];
int f[maxn][maxn][maxm][3];

int main()
{
	cin>>n>>m>>t;
	for(int i=1;i<=n;i++){
		cin>>s[i];
		s[i]=' '+s[i];
		int tot=1;
		for(int j=2;j<=m;j++){
			if(s[i][j]==s[i][j-1]) tot++;
			else{
				len[i].push_back(tot);
				tot=1;
			}
		}
		if(tot){
			len[i].push_back(tot);
		}
	}
	for(int i=1;i<=n;i++){
		for(int j=0;j<len[i].size();j++){
			for(int k=1;k<=t;k++){
				if(!j){
					int m=len[i-1].size()-1;
					if(m<0) m=0;
					f[i][j][k][0]=max(f[i-1][m][k][0],max(f[i-1][m][k][1],f[i-1][m][k][2]));
					f[i][j][k][1]=max(f[i-1][m][k-1][0],max(f[i-1][m][k-1][1],f[i-1][m][k-1][2]))+len[i][j];
					f[i][j][k][2]=max(f[i-1][m][k-1][0],max(f[i-1][m][k-1][1],f[i-1][m][k-1][2]));
				}
				else{
					f[i][j][k][0]=max(f[i][j-1][k][0],max(f[i][j-1][k][1],f[i][j-1][k][2]));
					f[i][j][k][1]=max(f[i][j-1][k-1][0]+len[i][j],max(f[i][j-1][k-1][1]+len[i][j],f[i][j-1][k][2]+len[i][j]));
					f[i][j][k][2]=max(f[i][j-1][k-1][0],max(f[i][j-1][k][1],f[i][k-1][k-1][2]));
				}
			}
		}
	}
	int ans=0;
	for(int i=1;i<=t;i++){
		int k=len[n].size()-1;
		if(k<0) k=0;
		ans=max(ans,max(f[n][k][i][0],max(f[n][k][i][1],f[n][k][i][2])));
	}
	cout<<ans<<endl;
	return 0;
}

第6 8 9个点RE

2021/7/9 18:40
加载中...