a53

PalSplit

a53
Oct 29th, 2021
154
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 0.98 KB | None | 0 0
  1. //Soltuie Iacob Tudor
  2. #include<bits/stdc++.h>
  3. using namespace std;
  4. ifstream fin("window.in");
  5. ofstream fout("window.out");
  6. int n,dp[505][505],v[505];
  7. bool dp2[505][505];
  8. int main(){
  9. cin>>n;
  10. for(int i=1;i<=n;i++)cin>>v[i],dp2[i][i]=true,dp[i][i]=1;
  11. for(int i=1;i<n;i++)dp2[i][i+1]=(v[i]==v[i+1]),dp[i][i+1]=((dp2[i][i+1])?1:2);
  12. for(int i=3;i<=n;i++){
  13. for(int j=1;j+i-1<=n;j++){
  14. dp2[j][j+i-1]=(v[j]==v[j+i-1]&&dp2[j+1][j+i-2]);
  15. }
  16. }
  17. for(int i=3;i<=n;i++){
  18. for(int j=1;j+i-1<=n;j++){
  19. dp[j][j+i-1]=1+dp[j+1][j+i-1];
  20. if(dp2[j][j+i-1])dp[j][j+i-1]=1;
  21. else{
  22. for(int k=j;k<j+i-1;k++){
  23. dp[j][j+i-1]=min(dp[j][j+i-1],dp[j][k]+dp[k+1][j+i-1]);
  24. }
  25. if(v[j]==v[j+i-1]){
  26. dp[j][j+i-1]=min(dp[j][j+i-1],dp[j+1][j+i-2]);
  27. }
  28. }
  29. }
  30. }
  31. cout<<dp[1][n];
  32. return 0;
  33. }
Advertisement
Add Comment
Please, Sign In to add comment