Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<bits/stdc++.h>
- using namespace std ;
- #define M 1000000007
- #define MM 998244353
- #define ll long long
- #define pb push_back
- #define mem0(a) memset(a,0,sizeof(a))
- #define mem1(a) memset(a,-1,sizeof(a))
- #define memf(a) memset(a,false,sizeof(a))
- #define all(v) v.begin(),v.end()
- #define sz(a) (ll)a.size()
- #define F first
- #define S second
- #define PI 3.1415926536
- #define INF 2e18
- #define endl "\n"
- #define llevel 20
- ll power(ll b,ll e,ll m)
- {
- if(e==0) return 1;
- if(e&1) return b*power(b*b%m,e/2,m)%m;
- return power(b*b%m,e/2,m);
- }
- ll power( ll b, ll e)
- {
- if(e==0) return 1;
- if(e&1) return b*power(b*b,e/2);
- return power(b*b,e/2);
- }
- ll n;
- string str;
- const int N=800;
- ll dp[N][N],ans[N][N];
- vector<int> zFunction(string &s)
- {
- int n=sz(s),l,r,i;
- vector<int> z(n);
- z[0]=n;
- l=r=0;
- for(i=1;i<n;++i)
- {
- if(i<=r)
- z[i]=min(r-i+1,z[i-l]);
- while(i+z[i]<n && s[z[i]]==s[z[i]+i])
- ++z[i];
- if(i+z[i]-1>r)
- {
- l=i;r=i+z[i]-1;
- }
- }
- return z;
- }
- ll calc(string s)
- {
- vector<int> vv=zFunction(s);
- ll kk=sz(s);
- ll ans=kk;
- for(ll i=1;i<kk;++i)
- {
- if(kk%i==0 && i+vv[i]==kk)
- ans=min(ans,i);
- }
- return ans;
- }
- ll getans(ll i,ll j)
- {
- if(i==j)
- return 1;
- if(ans[i][j]!=-1)
- return ans[i][j];
- if(dp[i][j]<j-i+1)
- {
- return ans[i][j]=getans(i,i+dp[i][j]-1);
- }
- ll ret=j-i+1;
- for(ll kk=i;kk<j;++kk)
- {
- ret=min(getans(i,kk)+getans(kk+1,j),ret);
- }
- return ans[i][j]=ret;
- }
- int _runtimeTerror_()
- {
- ll i,j;
- cin>>n>>str;
- mem1(ans);
- for(i=0;i<n;++i)
- {
- for(j=i;j<n;++j)
- {
- if(j==i)
- {
- dp[i][j]=1;continue;
- }
- string t=str.substr(i,j-i+1);
- dp[i][j]=calc(t);
- }
- }
- cout<<getans(0,n-1);
- return 0;
- }
- int main()
- {
- ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0);
- #ifdef runSieve
- sieve();
- #endif
- #ifdef NCR
- initialize();
- #endif
- int TESTS=1;
- //cin>>TESTS;
- while(TESTS--)
- _runtimeTerror_();
- return 0;
- }
Add Comment
Please, Sign In to add comment