Cod sursa(job #2132445)

Utilizator RG1999one shot RG1999 Data 15 februarie 2018 19:33:03
Problema Subsir crescator maximal Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.75 kb
#include <bits/stdc++.h>

using namespace std;
int k,n,dp[100001][30],i,j,vl[100001][30],ans,q,l;
char c;
int v[100001];
int main()
{
    freopen("blis.in","r",stdin);
    freopen("blis.out","w",stdout);
    scanf("%d ",&k);
    scanf("%c",&c);
    while(!feof(stdin))
    {
        v[++n]=c-'0';
        scanf("%c",&c);
    }
    for(i=1;i<=n;i++)
        for(j=i;j>=max(1,i-k+1);j--)
        vl[i][i-j+1]=vl[i][i-j]+(1<<(i-j+1))*v[j];
    dp[1][1]=1;
    for(i=2;i<=n;i++)
    for(j=i;j>=max(1,i-k+1);j--)
    for(q=j-1;q>=max(1,j-k+1);q--)
        for(l=1;l<=k;l++)
        if(vl[q][l]>vl[i][i-j+1])
    {
        dp[i][i-j+1]=max(dp[i][i-j+1],dp[q][l]+1);
        ans=max(ans,dp[i][i-j+1]);
    }
    printf("%d",ans);
    return 0;
}