Allow Contributor to edit published post and filter by page id

You can use user_has_cap filter to check and grant capabilities dynamically.

add_filter('user_has_cap', 'contributor_can_edit_published_posts', 10, 4);
function contributor_can_edit_published_posts($allcaps, $caps, $args, $user) {
  global $post;
  // Do we have a post?
  if ( ! $post ) {
    return $allcaps;
  }    
  // Is the user a contributor?
  if ( ! isset( $allcaps['contributor'] ) || true !== $allcaps['contributor'] ) {
    return $allcaps;
  }
  // Is the user the author of the post
  if ( $post->post_author != $user->ID ) {
    return $allcaps;
  }
  // Is the contributor allowed to edit this post?
  if ( ! in_array( $post->ID, array(1,2,3,4,5) ) ) {
    return $allcaps;
  }
  // Can the user edit published posts already? Allow, if not
  if ( ! isset( $allcaps['edit_published_posts'] ) && true !== $allcaps['edit_published_posts'] ) {
    $allcaps['edit_published_posts'] = true;
  }
  return $allcaps;
}