1090: [SCOI2003]字符串折叠 (区间动态规划)

来源:互联网 发布:foxbot编程序软件 编辑:程序博客网 时间:2024/05/29 19:01
#include<iostream>#include<cstring>#include<cstdio>#define inf 0x7fffffffusing namespace std;char s[101];int n,f[101][101];bool mark[101][101];inline bool jud(int l,int r,int cl,int cr){if((r-l+1)%(cr-cl+1)!=0)return 0;    for(int i=l;i<=r;i++)    if(s[i]!=s[(i-l)%(cr-cl+1)+cl])return 0;    return 1;}int get(int x){int t=0;while(x){x/=10;t++;}return t;}inline int dp(int l,int r){if(l==r)return 1;if(mark[l][r])return f[l][r];mark[l][r]=1;int t=r-l+1;for(int i=l;i<r;++i){t=min(t,dp(l,i)+dp(i+1,r));if(jud(i+1,r,l,i))            t=min(t,dp(l,i)+2+get((r-i)/(i-l+1)+1)); }return f[l][r]=t;}int main(){scanf("%s",s);n=strlen(s)-1;printf("%d",dp(0,n));return 0;}

0 0