记录编号 137998 评测结果 AAAAAAAAAAAAAAAAAAAA
题目名称 神奇的压缩机 最终得分 100
用户昵称 GravatarIostream3100 是否通过 通过
代码语言 C++ 运行时间 0.186 s
提交时间 2014-11-05 15:56:12 内存使用 0.33 MiB
显示代码纯文本
#include<iostream>
#include<cstdio>
#include<cmath>
#include<algorithm>
#include<cstring>
using namespace std;
const int MAXN=4100;
int A,B,next[MAXN],f[MAXN];
string s;
void prework(void){
	memset(next,0,sizeof(next));
	for(int i=0;i<s.size();++i){
		for(int j=0;j<i;++j){
			int tot=0,k=j;
			while(i+tot<s.size()&&s[k]==s[i+tot]){
				++tot;
				++k;
				if(k>=i) k=j;
			}
			next[i]=max(next[i],tot);
		}
	}
//	for(int i=0;i<s.size();++i) cout<<i<<":  "<<next[i]<<endl;
}
void init(void){
	cin>>s;
	cin>>A>>B;
}
void work(void){
	prework();
	memset(f,127/3,sizeof(f));
	f[0]=0;
	for(int i=0;i<s.size();++i){
		f[i]=f[i-(i>0)]+A;
		for(int j=0;j<i;++j){
			if(next[j]+j-1>=i) f[i]=min(f[i],(j>0? f[j-1]:0)+B);
		}
	}
}
void print(void){
//	for(int i=0;i<s.size();++i) cout<<i<<"? "<<f[i]<<endl;
	cout<<f[s.size()-1]<<endl;
}
int main(){
	freopen("WinCHG.in","r",stdin);
	freopen("WinCHG.out","w",stdout);
	init();
	work();
	print();
}