1 条题解
-
1
#include<bits/stdc++.h> using namespace std; const int N=1e3+5; const int inf=0x3f3f3f3f; char str[N]; int f[N][N]; int calc(int x){ int res=0; while(x){ res++; x/=10; } return res; } int check(int l,int r,int len){ for(int i=l+len;i<=r;i++){ if(str[i]!=str[i-len]){ return 0; } } return 1; } int main(){ scanf("%s",str+1); int n=strlen(str+1); memset(f,0x3f,sizeof(f)); for(int i=1;i<=n;i++){ f[i][i]=1; } for(int l=2;l<=n;l++){ for(int i=1;i<=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]); } for(int k=i;k<j;k++){ if((j-i+1)%(k-i+1)!=0)continue; if(!check(i,j,k-i+1))continue; f[i][j]=min(f[i][j],f[i][k]+2+calc((j-i+1)/(k-i+1))); } } } printf("%d",f[1][n]); return 0; }
- 1
信息
- ID
- 1090
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 6
- 标签
- (无)
- 递交数
- 24
- 已通过
- 12
- 上传者