Videopoker 的问题的极大

Problem Description
Videopoker is the slot machine variant of the currently immensely popular game of poker. It is a variant on draw poker. In this game the player gets a hand consisting of five cards randomly drawn from a standard 52-card deck. From this hand, the player may discard any number of cards (between 0 and 5, inclusive), and change them for new cards randomly drawn from the remainder of the deck. After that, the hand is evaluated and the player is rewarded according to a payout structure. A common payout structure is as follows:

Once you know the payout structure, you can determine for a given hand which cards you must change to maximize your expected reward. We'd like to know this expected reward, given a hand.

On the first line one positive number: the number of testcases, at most 100. After that per testcase:

  • One line with nine integers xi (0 ≤ xi ≤ 1000$) describing the payout structure. The numbers are in increasing order and describe the payout for one pair, two pair, etc, until the royal flush.
  • One line with one integer n (1 ≤ n ≤ 10): the number of starting hands to follow.
  • n lines, each describing a starting hand. A hand consists of five space separated tokens of the form Xs, with X being the rank (2'...9', T',J', Q',K' or A') and s being the suit (c', d',h' or `s').

Per testcase:

  • One line for each starting hand with a floating point number that is the maximal expected reward for that hand. These numbers must have an absolute or relative error less than 10-6.

Sample Input
1 2 3 4 5 10 25 100 250
Ah Ac Ad As 2s
Ks Qs Js Ts 2h
Ks Qs 2d 2h 3s
2d 4h 5d 3c 9c
2h 3h 6d 8h Tc

Sample Output

Csdn user default icon