Cod sursa(job #2902042)

Utilizator StefanBejanBejan Stefan StefanBejan Data 15 mai 2022 09:05:59
Problema Deque Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.27 kb
#include <iostream>
#include <cstring>

using namespace std;
int dp2[301];
int dp[301][301];
int poz[301];
char sir[301];

void Afisare(int i)
{
    if(i == 0) return ;
    Afisare(i - poz[i]);
    for(int j = i - poz[i]; j < i; j ++)
        cout << sir[j];
    cout << " ";
}

int main()
{

    cin.getline(sir, 301);
    int n = strlen(sir);

    for(int i = 1; i <= n; i ++)
        {
            dp[1][i] = 1;
            dp[0][i] = 1;
        }
    for(int i = 2; i <= n; i ++)
    {
        for(int j = 1; j <= n; j ++)
            if(sir[j - 1] == sir[j + i - 2])
        {
            if(dp[i - 2][j + 1] == 1)
                dp[i][j] = 1;
            else dp[i][j] = 0;
        }
        else dp[i][j] = 0;
    }
    int ct = 0;
    for(int i = 1; i <= n; i ++)
        {
            for(int j = 1;j <= n; j ++)
             if(dp[i][j] == 1) ct ++;
        }
    cout << ct << " ";

    for(int i = 1; i <= n; i ++)
        dp2[i] = i;
    for(int i = 2; i <= n; i ++)
    {
        for(int j = 1; j <= i; j ++)
         if(dp[j][i - j + 1] == 1 && dp2[i - j] + 1 < dp2[i])
          {
              dp2[i]= dp2[i - j] + 1;
              poz[i] = j;
          }
    }
    cout << dp2[n] << '\n';
    Afisare(n);
    return 0;
}