死亡回放
代码:
#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
#define int long long
string s;
int n,dp[110][110];
inline int number(int x){
if(x==0)return 1;
int cnt=0;
while(x!=0){
x/=10;
cnt++;
}
return cnt;
}
inline bool check(int l,int r,int len){
for(int i=l;i+len<r;i++){
if(s[i]!=s[i+len])return false;
}
return true;
}
signed main(){
cin>>s;
n=s.size();
for(int i=1;i<=n;i++)dp[i][i]=1;
for(int i=2;i<=n;i++){
for(int l=1,r=i;r<=n;l++,r++){
dp[l][r]=i;
for(int k=l;k<r;k++)dp[l][r]=min(dp[l][r],dp[l][k]+dp[k+1][r]);
for(int k=2;k<=i;k++){
if(i%k==0&&check(l,r,k))
dp[l][r]=min(dp[l][r],number(i/k)+dp[l][l+k-1]+2);
}
}
}
cout<<dp[1][n];
return 0;
}
有大佬能帮忙看看代码吗?