Pagini recente » Cod sursa (job #2295055) | Cod sursa (job #1708208) | Cod sursa (job #2311743) | Cod sursa (job #148570) | Cod sursa (job #2902043)
#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;
}