社区讨论
70 pts 求调
题目总版参与者 2已保存回复 1
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 1 条
- 当前快照
- 1 份
- 快照标识符
- @lo2hlg7t
- 此快照首次捕获于
- 2023/10/23 13:58 2 年前
- 此快照最后确认于
- 2023/10/23 13:58 2 年前
CPP
#include <bits/stdc++.h>
using namespace std;
#define int long long
const int N=105;
int n,num[N];
int f[N][N];
string s;
inline bool check(int l1,int r1,int l2,int r2) {
int k=l1;
for(int i=l2;i<=r2;++i) {
if(s[i]!=s[k++]) return 0;
if(k>r1) k=l1;
}
return 1;
}
signed main() {
cin>>s;
n=s.size();
s=" "+s;
for(int i=1;i<=n;++i) num[i]=num[i/10]+1;
for(int i=1;i<=n;++i) f[i][i]=1;
for(int l=1;l<=n;++l)
for(int i=1;i+l-1<=n;++i) {
int j=i+l-1;
f[i][j]=l;
for(int k=i;k<j;++k) {
f[i][j]=min(f[i][j],
f[i][k]+f[k+1][j]);
if(check(i,k,k+1,j))
f[i][j]=min(f[i][j],
f[i][k]+num[l/(k-i+1)]+2);
}
}
cout<<f[1][n];
return 0;
}
回复
共 1 条回复,欢迎继续交流。
正在加载回复...